SlickText MCP by usefulapi
Read SlickText contacts, lists, campaigns, analytics and inbox; create and update contacts.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (3)
- HIGH
- LOWen slicktext_list_segment_contacts
- INFOen slicktext_find_contact
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"slicktext": {
"url": "https://slicktext.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://slicktext.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (24)
🟢slicktext_get_brand
Get the SlickText brand this API key belongs to: brand_id, name, website, sending-number registration details, opt-in / double-opt-in messages, inbox settings and the message credit limit. Every other tool works within this brand. GET /brands.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_credit_usage
Message credits for the current billing period: total_credits (subscription + rollover + purchased), credits_used, credits_available and the credit limit. GET /brands/{brand_id}/usage.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_contacts(opt_in_status, first_name, last_name, custom_fields, limit, ...)
List the brand's contacts (subscribers) with name, mobile_number, email, opt_in_status, source, custom_fields and dates. Filters are exact, case-sensitive matches (SlickText has no partial search). Paged: returns count, has_more and next_offset. GET /brands/{brand_id}/contacts.
Esquema de entrada
{
"type": "object",
"properties": {
"opt_in_status": {
"description": "Only contacts with this opt-in status.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"first_name": {
"description": "Exact first name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"last_name": {
"description": "Exact last name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"custom_fields": {
"description": "Exact-match filters on custom fields, keyed by internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_find_contact(mobile_number, email, limit, offset)
Find contacts by mobile number or email address (exact match). A 10-digit US number is matched as +1XXXXXXXXXX, the way SlickText stores numbers. Use it before creating a contact to avoid duplicates. GET /brands/{brand_id}/contacts?mobile_number=… or ?email=….
Esquema de entrada
{
"type": "object",
"properties": {
"mobile_number": {
"description": "Mobile number, e.g. +16155553338 or (615) 555-3338.",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"email": {
"description": "Exact email address (case-sensitive, as stored).",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_contact(contact_id)
Get one contact by id: name, mobile_number, email, birthdate, address, opt_in_status, source, custom_fields, time zone and dates. GET /brands/{brand_id}/contacts/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_custom_fields(limit, offset)
List the brand's contact custom fields: name, internal_name (the key used in contact filters and writes), data_type and description. GET /brands/{brand_id}/custom-fields.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_lists(name, limit, offset)
List the brand's contact lists (contact_list_id, name, description, created). Optional exact name filter. GET /brands/{brand_id}/lists.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"description": "Exact list name (case-sensitive).",
"type": "string",
"maxLength": 255
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_list(list_id)
Get one contact list by id plus its contact count (all statuses: subscribed, not subscribed, unsubscribed, blocked). GET /brands/{brand_id}/lists/{id} and /lists/{id}/contacts/count.
Esquema de entrada
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (a positive integer)."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_list_contacts(list_id, opt_in_status, limit, offset)
List the contacts in one contact list (paged). GET /brands/{brand_id}/lists/{id}/contacts.
Esquema de entrada
{
"type": "object",
"properties": {
"list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (a positive integer)."
},
"opt_in_status": {
"description": "Only contacts with this opt-in status.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_segments(limit, offset)
List the brand's segments (rule-based contact groups: segment_id, name, description). GET /brands/{brand_id}/segments.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_segment_contacts(segment_id, limit, offset)
List the contacts that currently match one segment (paged). GET /brands/{brand_id}/segments/{id}/contacts.
Esquema de entrada
{
"type": "object",
"properties": {
"segment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The segment id (a positive integer)."
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"segment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_campaigns(status, limit, offset)
List the brand's SMS/MMS campaigns: name, body, status (e.g. draft, scheduled, queued, sent), scheduled/started/finished times, completion_percentage and audience (lists/segments and size). GET /brands/{brand_id}/campaigns.
Esquema de entrada
{
"type": "object",
"properties": {
"status": {
"description": "Exact status, e.g. \"sent\", \"scheduled\", \"draft\".",
"type": "string",
"maxLength": 32
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_campaign(campaign_id)
Get one campaign by id: body, media_url, status, audience_size, schedule and completion. GET /brands/{brand_id}/campaigns/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The campaign id (a positive integer)."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_campaign_stats(campaign_id, group)
Performance of one campaign: contacts reached, clicks, click_rate, unique clicks, unsubscribes, unsubscribe_rate, orders, revenue, average order value, revenue per message, plus the campaign, its audiences and links. GET /brands/{brand_id}/analytics/campaigns/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The campaign id (a positive integer)."
},
"group": {
"description": "Group the results by source.",
"type": "string",
"enum": [
"source"
]
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_analytics(metric, group, start, end, frequency, ...)
Brand-level analytics. metric: contacts (current totals), contact_growth, contact_add_delete_events, opt_in_status_events, campaigns, messages (messages sent), message_credits, inbox_users (assignments, closures, response times per user), inbox_tags. Optional group (allowed per metric — contacts: source|opt_in_status; contact_growth/campaigns: contact_source; contact_add_delete_events: contact_source|type; opt_in_status_events: contact_source|contact_unsubscribe_source|opt_in_status; messages: source|status|direction|weekday; message_credits: source|status), a start/end range, frequency (hour/day/month/year) and compare (YoY, QoQ, MoM, WoW, DoD, PoP). GET /brands/{brand_id}/analytics/….
Esquema de entrada
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"enum": [
"contacts",
"contact_growth",
"contact_add_delete_events",
"opt_in_status_events",
"campaigns",
"messages",
"message_credits",
"inbox_users",
"inbox_tags"
],
"description": "Which analytics report."
},
"group": {
"description": "Group results by this field (allowed values depend on metric; see description).",
"type": "string",
"maxLength": 64
},
"start": {
"description": "Range start, YYYY-MM-DD or YYYY-MM-DD HH:MM[:SS] (SlickText's format, no time zone (passed through as is)).",
"type": "string",
"maxLength": 32
},
"end": {
"description": "Range end, YYYY-MM-DD (= end of that day) or YYYY-MM-DD HH:MM[:SS] (SlickText's format, no time zone (passed through as is)).",
"type": "string",
"maxLength": 32
},
"frequency": {
"description": "Bucket size of the time series.",
"type": "string",
"enum": [
"hour",
"day",
"month",
"year"
]
},
"compare": {
"description": "Compare with the previous period.",
"type": "string",
"enum": [
"YoY",
"QoQ",
"MoM",
"WoW",
"DoD",
"PoP"
]
}
},
"required": [
"metric"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_keywords(active, limit, offset)
List the brand's text-to-join keywords (word, description, active, auto-response and opt-in messages, double opt-in). GET /brands/{brand_id}/keywords.
Esquema de entrada
{
"type": "object",
"properties": {
"active": {
"description": "true = only active keywords, false = only inactive.",
"type": "boolean"
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_keyword(keyword_id)
Get one keyword by id, including the contact_list_ids that people who text it are added to. GET /brands/{brand_id}/keywords/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"keyword_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The keyword id (a positive integer)."
}
},
"required": [
"keyword_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_messages(direction, status, source, source_id, to, ...)
List individual SMS/MMS messages sent and received by the brand: to, from, body, direction, source (Campaign, Keyword, InboxThread, API …), status (delivered, undelivered …), credits and the contact. Filters are exact matches; use to/from with a phone number to read one contact's history, or source=InboxThread with source_id = a conversation id. GET /brands/{brand_id}/messages.
Esquema de entrada
{
"type": "object",
"properties": {
"direction": {
"type": "string",
"enum": [
"incoming",
"outgoing"
]
},
"status": {
"description": "Exact status, e.g. \"delivered\", \"undelivered\".",
"type": "string",
"maxLength": 32
},
"source": {
"description": "Exact source, e.g. \"Campaign\", \"Keyword\", \"InboxThread\", \"API\".",
"type": "string",
"maxLength": 32
},
"source_id": {
"description": "Id of the source (a campaign id, a conversation id …).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$"
},
"to": {
"description": "Recipient number (outgoing messages: the contact; incoming: your number).",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"from": {
"description": "Sender number (incoming messages: the contact; outgoing: your number).",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_conversations(status, assigned_to_user_id, limit, offset)
List two-way inbox conversations: status (open, pending, closed), the contact, the last message and its direction/time, assigned user, tags and unread state. GET /brands/{brand_id}/inbox-threads.
Esquema de entrada
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"open",
"pending",
"closed"
]
},
"assigned_to_user_id": {
"description": "Only conversations assigned to this user id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_get_conversation(conversation_id)
Get the content of one inbox conversation by its id (the _id from slicktext_list_conversations). For the message-by-message history also call slicktext_list_messages with source=InboxThread and source_id=<conversation id>. GET /brands/{brand_id}/inbox-threads/{id}/content.
Esquema de entrada
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"pattern": "^[A-Za-z0-9]{1,64}$",
"description": "The conversation _id, e.g. 6744a2ba587c8f2cf4028786."
}
},
"required": [
"conversation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢slicktext_list_inbox_tags(limit, offset)
List the inbox tags used to label conversations (inbox_tag_id, name, color, description). GET /brands/{brand_id}/inbox-tags.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"description": "Results per page (1-100, default 25).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Use next_offset from the previous page.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_create_contact(mobile_number, first_name, last_name, email, birthdate, ...)
WRITE: add a contact to the brand. By default the contact is created as 'not subscribed' and gets no text. Set opt_in_status='subscribed' ONLY for people who gave explicit permission to receive texts (SlickText has a zero-tolerance policy for unsolicited texts). force_double_opt_in=true makes SlickText SEND A REAL SMS to the number asking the person to confirm. Check slicktext_find_contact first to avoid duplicates. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. POST /brands/{brand_id}/contacts.
Esquema de entrada
{
"type": "object",
"properties": {
"mobile_number": {
"type": "string",
"minLength": 7,
"maxLength": 32,
"description": "Mobile number (required), e.g. +16155553338 or (615) 555-3338."
},
"first_name": {
"type": "string",
"maxLength": 255
},
"last_name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"birthdate": {
"description": "Birthday, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"address": {
"type": "string",
"maxLength": 255
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 64
},
"zip": {
"type": "string",
"maxLength": 16
},
"country": {
"type": "string",
"maxLength": 64
},
"timezone": {
"description": "Contact time zone (SlickText accepts these four).",
"type": "string",
"enum": [
"America/New_York",
"America/Chicago",
"America/Denver",
"America/Los_Angeles"
]
},
"language": {
"description": "Primary language code, e.g. \"en\".",
"type": "string",
"maxLength": 16
},
"custom_fields": {
"description": "Custom field values keyed by the field's internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"opt_in_status": {
"description": "Default 'not subscribed'. 'subscribed' only with the person's explicit consent.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
},
"force_double_opt_in": {
"description": "true = SlickText texts the number a double opt-in confirmation (a real SMS).",
"type": "boolean"
}
},
"required": [
"mobile_number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_update_contact(contact_id, mobile_number, first_name, last_name, email, ...)
WRITE: change fields of an existing contact (only the fields you pass are sent). opt_in_status can mark a contact unsubscribed or blocked; set it to 'subscribed' ONLY when the person explicitly agreed to receive texts. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. PUT /brands/{brand_id}/contacts/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
},
"mobile_number": {
"description": "New mobile number.",
"type": "string",
"minLength": 7,
"maxLength": 32
},
"first_name": {
"type": "string",
"maxLength": 255
},
"last_name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"birthdate": {
"description": "Birthday, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"address": {
"type": "string",
"maxLength": 255
},
"city": {
"type": "string",
"maxLength": 255
},
"state": {
"type": "string",
"maxLength": 64
},
"zip": {
"type": "string",
"maxLength": 16
},
"country": {
"type": "string",
"maxLength": 64
},
"timezone": {
"description": "Contact time zone (SlickText accepts these four).",
"type": "string",
"enum": [
"America/New_York",
"America/Chicago",
"America/Denver",
"America/Los_Angeles"
]
},
"language": {
"description": "Primary language code, e.g. \"en\".",
"type": "string",
"maxLength": 16
},
"custom_fields": {
"description": "Custom field values keyed by the field's internal_name (see slicktext_list_custom_fields), e.g. {\"favorite_color\": \"blue\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"opt_in_status": {
"description": "New opt-in status. 'subscribed' only with the person's explicit consent.",
"type": "string",
"enum": [
"not subscribed",
"subscribed",
"unsubscribed",
"blocked"
]
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴slicktext_add_contact_to_lists(contact_id, list_ids)
WRITE: add one contact to one or more contact lists (it does not change the contact's opt-in status; lists are also campaign audiences). Returns SlickText's count of memberships added. WARNING: SlickText workflows can trigger on this event (Contact Created / Contact Field Changed / Contact Added to List) and may immediately SEND REAL TEXTS or take other actions configured in the brand's workflows. POST /brands/{brand_id}/lists/contacts.
Esquema de entrada
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact id (a positive integer)."
},
"list_ids": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "Contact list ids (from slicktext_list_lists)."
}
},
"required": [
"contact_id",
"list_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia