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"
}커뮤니티
증거