Salsa Engage MCP by usefulapi
Search supporters, donations, emails and segments; create or update supporters in Salsa Engage.
使うべきか
品質と安全性
検出事項(4)
- HIGH
- MEDIUMsalsa_search_transactions 内
- MEDIUMsalsa_get_email_blast_results 内
- MEDIUMsalsa_search_segment_members 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"salsa-engage": {
"url": "https://salsa-engage.usefulapi.io/mcp"
}
}
}リモートエンドポイント
https://salsa-engage.usefulapi.io/mcpstreamable-httpできること
ツール一覧
ツール(11)
🟢salsa_get_call_metrics
Show the calls left in the current one-minute window for this token, the batch limit, and the call counters. Good first call to check the token works. Engage API: GET /integration/ext/v1/metrics.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_supporters(identifiers, searchString, modifiedFrom, modifiedTo, offset, ...)
Find supporters by Salsa Engage supporter ID, by text (first name, last name, email or cell phone), or by the time their census data changed. Returns each supporter with address, contacts and per-record errors and warnings. Engage API: POST /integration/ext/v1/supporters/search.
入力スキーマ
{
"type": "object",
"properties": {
"identifiers": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"description": "Salsa Engage supporter IDs (UUIDs), up to 20 per call."
},
"searchString": {
"description": "Text to match in first name, last name, email or cell phone.",
"type": "string",
"minLength": 1
},
"modifiedFrom": {
"description": "Only supporters whose census data changed on or after this UTC time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"modifiedTo": {
"description": "Upper bound for modifiedFrom (UTC).",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_get_supporter_groups(identifiers)
List the groups that each of the given supporters belongs to. Engage API: POST /integration/ext/v1/supporters/groups.
入力スキーマ
{
"type": "object",
"properties": {
"identifiers": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"description": "Salsa Engage supporter IDs (UUIDs), up to 20 per call."
}
},
"required": [
"identifiers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_transactions(identifiers, identifierType, transactionFrom, transactionTo, offset, ...)
Find donation transactions by transaction ID or supporter ID, or by a transaction date range. Pass identifiers with identifierType, or transactionFrom (with transactionTo). Engage API: POST /integration/ext/v1/transactionDetails/search.
入力スキーマ
{
"type": "object",
"properties": {
"identifiers": {
"description": "Transaction IDs or supporter IDs (UUIDs), up to 20 per call.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"identifierType": {
"description": "Type of the identifiers. Required when identifiers are given.",
"type": "string",
"enum": [
"TRANSACTION_ID",
"SUPPORTER_ID"
]
},
"transactionFrom": {
"description": "Earliest transaction time (UTC).",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"transactionTo": {
"description": "Latest transaction time (UTC).",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_activities(activityIds, activityFormIds, supporterIds, type, modifiedFrom, ...)
Find supporter activity (signups, donations, petitions, letters, event registrations and similar) by activity ID, by form, by supporter, or by modified time. Pass modifiedFrom or activityIds. Engage API: POST /integration/ext/v1/activities/search.
入力スキーマ
{
"type": "object",
"properties": {
"activityIds": {
"description": "Activity UUIDs, up to 20 per call.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"activityFormIds": {
"description": "Form UUIDs, up to 20 per call.",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"supporterIds": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"description": "Salsa Engage supporter IDs (UUIDs), up to 20 per call."
},
"type": {
"description": "Only this kind of form activity.",
"type": "string",
"enum": [
"SUBSCRIPTION_MANAGEMENT",
"SUBSCRIBE",
"FUNDRAISE",
"PETITION",
"TARGETED_LETTER",
"TICKETED_EVENT",
"P2P_EVENT",
"FACEBOOK_AD",
"REGULATION_COMMENTS"
]
},
"modifiedFrom": {
"description": "Only activity modified on or after this UTC time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"modifiedTo": {
"description": "Upper bound for modifiedFrom (UTC).",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_email_blasts(id, contentId, type, publishedFrom, publishedTo, ...)
Find sent email blasts by blast ID, content ID, or publish date. Use the returned cursor to read more. Engage API: POST /integration/ext/v1/emails/search.
入力スキーマ
{
"type": "object",
"properties": {
"id": {
"description": "Email blast ID (UUID).",
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"contentId": {
"description": "Email content ID (UUID).",
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"type": {
"description": "Blast type. The reference documents EMAIL only.",
"type": "string",
"const": "EMAIL"
},
"publishedFrom": {
"description": "Published on or after this UTC time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"publishedTo": {
"description": "Published on or before this UTC time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"cursor": {
"description": "Cursor from an earlier reply, to read the next results.",
"type": "string"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_get_email_blast_results(id, contentId, type, cursor, offset, ...)
Read the per-supporter results of one email blast (who received, opened or clicked it, as Engage reports them). Engage API: POST /integration/ext/v1/emails/individualResults.
入力スキーマ
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "Email blast ID (UUID), from salsa_search_email_blasts."
},
"contentId": {
"description": "Email content ID (UUID), when the blast has one.",
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"type": {
"description": "Blast type. The reference documents EMAIL only.",
"type": "string",
"const": "EMAIL"
},
"cursor": {
"description": "Cursor from an earlier reply, to read the next results.",
"type": "string"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_segments(segmentIds, offset, count)
Get the definition of segments (supporter groups used for email targeting and export) by segment ID. Engage API: POST /integration/ext/v1/segments/search.
入力スキーマ
{
"type": "object",
"properties": {
"segmentIds": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"description": "Segment UUIDs, up to 20 per call."
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"segmentIds"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_search_segment_members(segmentId, supporterIds, joinedSince, offset, count)
List the supporters in one segment, optionally only some supporter IDs or those who joined since a time. Engage API: POST /integration/ext/v1/segments/members/search.
入力スキーマ
{
"type": "object",
"properties": {
"segmentId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "Segment UUID."
},
"supporterIds": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"description": "Salsa Engage supporter IDs (UUIDs), up to 20 per call."
},
"joinedSince": {
"description": "Only members who joined the segment on or after this UTC time.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"segmentId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢salsa_list_custom_fields(type, offset, count)
List the supporter and activity custom fields in this Engage organization, with their names and types. Use it before you write custom data. Engage API: GET /integration/ext/v1/customFields.
入力スキーマ
{
"type": "object",
"properties": {
"type": {
"description": "Only fields of this kind.",
"type": "string",
"enum": [
"Supporter",
"Activity"
]
},
"offset": {
"description": "Items to skip. For the next page, send the previous offset plus the previous count.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"count": {
"description": "Items to return: 1 to 20 (the token batch limit).",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴salsa_upsert_supporters(supporters)
Create or update up to 20 supporters in one call. Give supporterId to update a known supporter. For a supporter without it, Engage decides the match, so check each result, errors and warnings in the reply. Engage API: PUT /integration/ext/v1/supporters.
入力スキーマ
{
"type": "object",
"properties": {
"supporters": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"supporterId": {
"description": "Salsa Engage supporter ID (UUID) of the record to update.",
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"externalSystemId": {
"description": "Your own reference for this supporter (sent as externalSystemId).",
"type": "string"
},
"title": {
"type": "string"
},
"firstName": {
"type": "string"
},
"middleName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"suffix": {
"type": "string"
},
"gender": {
"description": "For example Male or Female, as the Engage census field allows.",
"type": "string"
},
"dateOfBirth": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"
},
"address": {
"type": "object",
"properties": {
"addressLine1": {
"type": "string"
},
"addressLine2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"description": "Two-letter US state code (CA), or an ISO 3166-2 code elsewhere (NL-NH).",
"type": "string",
"pattern": "^[A-Z]{2}(-[A-Z0-9]{1,3})?$"
},
"postalCode": {
"type": "string"
},
"country": {
"description": "ISO 3166-1 alpha-2 code in capitals, for example US or NL.",
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"additionalProperties": {}
},
"contacts": {
"description": "Email addresses and phone numbers for the supporter.",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Contact type, for example EMAIL."
},
"value": {
"type": "string",
"minLength": 1
},
"status": {
"description": "Opt-in status, for example OPT_IN.",
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": {}
}
}
},
"additionalProperties": {}
},
"description": "Supporters to create or update, up to 20."
}
},
"required": [
"supporters"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}コミュニティ
エビデンス