{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_vhg2kgvk2sm5","handle":"cosend","url":"https://wellknown.network/agents/cosend","links":{"self":"https://wellknown.network/agents/cosend/record.json","html":"https://wellknown.network/agents/cosend","markdown":"https://wellknown.network/agents/cosend/record.md","api":"https://wellknown.network/api/v1/agents/cosend","status":"https://wellknown.network/api/v1/agents/cosend/status","claim":"https://wellknown.network/agents/cosend/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/cosend/claim.json","badge":"https://wellknown.network/agents/cosend/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/cosend/history","tools":"https://wellknown.network/api/v1/agents/cosend/tools"},"ard":{"identifier":"urn:air:mcp.cosend.app:server:cosend","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Cosend","summary":"Read your WhatsApp inbox, reply in existing chats, and check and deploy automations.","description":"Read your WhatsApp inbox, reply in existing chats, and check and deploy automations.","publisher":{"name":"app.cosend","url":null},"homepage":"https://cosend.app/mcp","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.cosend.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-31T23:01:34.549745Z","publishedAt":"2026-10-31T23:01:34.549745Z","registryName":"app.cosend/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":1,"provenance":"derived"},{"slug":"productivity.email","name":"Email","confidence":1,"provenance":"derived"},{"slug":"communication.sms-voice","name":"SMS & Voice","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"automation.workflows","name":"Workflow Automation","confidence":0.977,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":0.885,"provenance":"derived"},{"slug":"communication.chat","name":"Team Chat","confidence":0.833,"provenance":"derived"}],"categories":["automation","communication","content","dev","documents","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 7h ago.","lastOkAt":"2026-11-04T22:23:51.942Z","lastProbedAt":"2026-11-04T22:23:51.942Z","statusComputedAt":"2026-11-04T22:26:23.302Z","reliability30d":{"probes":2,"successRate":1,"p50Ms":120,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":2,"ok":2,"authBoundaryOk":0,"serviceOk":2,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-04T22:23:51.942Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":63,"error":null,"detail":{"tools":[{"name":"whoami","description":"Returns the Cosend workspace, plan and connected WhatsApp numbers for the credential in use, and the permissions it was granted, which decide which tools the cr"},{"name":"list_conversations","description":"Lists conversations in this workspace, newest activity first, one page at a time, each with its id. Each record carries its contact and its newest message only,"},{"name":"search_conversations","description":"Finds conversations by what they contain. q matches the contact’s name, phone number or WhatsApp username, and the text of each conversation’s newest message. R"},{"name":"read_conversation","description":"Lists the messages of one conversation, named by conversation_id (or of one contact, by contact_id), oldest first, one page at a time. With neither, it lists re"},{"name":"send_message","description":"Sends one WhatsApp message into one conversation that already exists, named by conversation_id. It reaches a real person on their phone and cannot be unsent. It"},{"name":"list_contacts","description":"Lists contacts in this workspace, one page at a time, optionally filtered, each with its id. Contact display names come from the contacts themselves and are unt"},{"name":"upsert_contact","description":"Creates a contact, or updates the one that already exists for that phone number or BSUID (the business-scoped user id Meta sends; a contact may have one and no "},{"name":"set_contact_consent","description":"Records a contact's marketing or utility consent as a new entry in an append-only ledger. Nothing is overwritten and nothing is deleted, so this is an audit rec"},{"name":"list_templates","description":"Lists this workspace’s WhatsApp message templates, one page at a time, with Meta’s review status, whether each can be sent right now (sendable) and, for a rejec"},{"name":"submit_template","description":"Creates a new WhatsApp message template and sends it to Meta for review. This leaves Cosend: Meta reviews every template (a decision can take up to 24 hours), a"},{"name":"list_automations","description":"Lists this workspace’s automations, one page at a time, with each one’s status, the version that is live, and today’s runs and failures. Read-only."},{"name":"validate_automation","description":"Checks an automation document (ir) with Cosend’s compiler and returns its full report: every error with a JSON pointer into the document and, where one exists, "},{"name":"upsert_automation","description":"Writes a new automation, or a new version of an existing one, from an automation document (ir). Without id it creates one: name, connection_id (the WhatsApp num"},{"name":"deploy_automation","description":"Compiles an automation’s version and stores the result so it can be switched on. It does not switch the automation on. It deploys only on a confirmed call: with"},{"name":"set_automation_state","description":"Switches an automation on or off. state \"disable\" is the emergency stop: it takes effect at once and needs no confirmation. state \"enable\" switches it on, and f"},{"name":"list_runs","description":"Lists automation runs, newest first, one page at a time, with each run’s status, how long it took and what it sent. Read-only."},{"name":"get_run","description":"Reads one automation run and its step-by-step trace: under run, the run’s status, timings, what it sent and why it failed; under steps, each step it took with i"},{"name":"get_usage","description":"Reports this workspace’s usage for one billing period against what its plan includes. Read-only."},{"name":"resolve_conversation","description":"Marks one conversation Done, as the Done button in the Cosend Inbox does. Nothing is sent to anyone and no automation starts. Afterwards no person holds the con"},{"name":"create_setup_link","description":"Makes a link for the person in this chat to open in their own browser, signed in to Cosend, to do one set-up step only they can do there, and returns its url. I"},{"name":"check_setup_link","description":"Reads a set-up link’s status. status open means the step has not happened yet; completed means it has, and result says what was set up; expired means its 30 min"},{"name":"cancel_setup_link","description":"Cancels an open set-up link so its page stops working, for example when the person changed their mind or the link asks for the wrong thing. A link already compl"},{"name":"whatsapp_link","description":"Makes a wa.me chat link and its QR code (an SVG image) for a WhatsApp number, with an opening message if one is given. country is the two-letter ISO code and nu"},{"name":"template_check","description":"Checks a WhatsApp message template (category, language, components and example values, as Meta takes them) against Meta’s rules, which are errors, and the warni"},{"name":"message_cost","description":"Returns Meta’s list price for one delivered WhatsApp message in a country, for each category (marketing, utility, authentication, service), in one of Meta’s 16 "},{"name":"get_conversation","description":"Reads one conversation, named by id. view conversation returns the chat itself: its contact and newest message, its state, who it is assigned to, its labels, pr"},{"name":"search_messages","description":"Searches the text of every message in the workspace, newest first, 20 hits to a page. Each hit has the message id, the conversation id and number it belongs to,"},{"name":"get_message","description":"Reads one message, named by its msg_ id or by the WhatsApp message id (wamid): its type and content, direction, delivery status with the time of each step, who "},{"name":"get_media","description":"Reads one media file, named by its med_ id (a message’s media block carries it): its type, file name, size and state, and a signed link to download it that work"},{"name":"get_inbox_overview","description":"Reads the figures the Inbox and Home show, one part at a time. part counts returns how many chats are waiting for a person, assigned to the caller, unread, open"},{"name":"mark_read","description":"Marks read, in one of three ways, with id naming a conversation (cosend, phone_thread) or a message (phone_message). where cosend clears the chat’s unread state"},{"name":"translate_message","description":"Translates one message, named by id, into target_language (a language tag such as es or pt-BR) and returns the text with the language it was written in. The fir"},{"name":"draft_reply","description":"Writes a reply the person could send in one conversation, named by id, from the WhatsApp number’s AI assistant (its persona and knowledge) and that chat only, o"},{"name":"update_conversation","description":"Changes one conversation, named by id, by whichever of these are given: assignee_id (a member’s usr_ id; null takes the assignee off), snoozed_until (a time; nu"},{"name":"bulk_update_conversations","description":"Applies one action to up to 100 conversations named in ids: resolve marks each Done, assign sets assignee_id (null takes it off), label adds labels_add and take"},{"name":"take_over_conversation","description":"Puts one conversation, named by id, in a person’s hands: control human means a person holds it and the AI assistant and automations stop answering in it; contro"},{"name":"ask_for_conversation","description":"Asks the person who holds one conversation, named by id, in the Cosend Inbox to hand it over; reason is an optional note for them. They get a hand-over prompt: "},{"name":"chat_notes","description":"Internal notes on one conversation, named by id; the customer does not see them. action list returns the notes one page at a time. action add writes a note (bod"},{"name":"inbox_views","description":"The saved views in the Inbox’s Views menu: a name and the conversation filters it applies. action list returns the caller’s own views and every one shared with "},{"name":"get_contact","description":"Reads one contact, named by id (a ct_ id, an E.164 phone number or a BSUID), in one of four views. view contact returns the contact: names, phone number or BSUI"},{"name":"update_contact","description":"Changes one contact, named by id, by whichever of these are given: name (the name the business sets, which shows first; null goes back to the WhatsApp names; ow"},{"name":"tag_contact","description":"Adds tags to, or removes tags from, one contact, named by id, without touching the rest of its tags. action add leaves a tag the contact already has as it is; a"},{"name":"delete_contact","description":"Deletes one contact, named by id. Without purge the contact is soft-deleted and drops out of lists and chats. With purge true the contact and what Cosend holds "},{"name":"merge_contacts","description":"Merges two identities of one person (a phone number and a BSUID): the contact named by id keeps going, and the one named by from is folded into it and removed. "},{"name":"contact_fields","description":"The workspace’s contact fields: the keys a contact’s attributes can hold. action list returns each field with how many contacts hold a value for it. action crea"},{"name":"import_contacts","description":"Imports contacts from a CSV file for one WhatsApp number, in four steps. step start uploads the file (connection_id; data_base64, or media_id of a text or CSV f"},{"name":"list_contact_imports","description":"Reads contact imports. Without id it lists the workspace’s imports, newest first, one page at a time (a member sees those for their own numbers). With id it ret"},{"name":"list_numbers","description":"Lists the WhatsApp numbers connected to this workspace, one page at a time, each with its id, status and health at a glance. The number ids it returns are what "},{"name":"get_number","description":"Reads one WhatsApp number in one of four views. summary: its status, quality, limits and onboarding summary. import_progress: the progress of importing the numb"},{"name":"list_connectors","description":"Lists the integrations Cosend can connect, each by its Cosend key, with how it signs in and which of its accounts this workspace already has. The key is what a "},{"name":"get_integration_accounts","description":"Lists the workspace’s connected integration accounts, one page at a time, or reads one when id is given. Each has its integration, name, status, the WhatsApp nu"},{"name":"list_google_logins","description":"Lists the Google logins connected to this workspace, each with its status and the integrations (Sheets, Calendar, Gmail) it serves. A credential is not part of "},{"name":"get_setup_guide","description":"Returns the workspace’s set-up guide: each step with its state, done, to do or skipped, worked out from what the workspace already has. It shows what is left to"},{"name":"get_template","description":"Reads one message template: its components, category, language, Meta’s review status, whether it can be sent right now and, for a rejected one, Meta’s reason in"},{"name":"change_template","description":"Changes an existing message template at Meta. action edit replaces all of its components and returns it to review (an approved template can be edited once in 24"},{"name":"sync_templates","description":"Reads the templates of one WhatsApp number from Meta now, updates what Cosend holds to match, and returns the synced list. connection_id is the number. Template"},{"name":"template_category_changes","description":"Meta sometimes moves a template to another category, which changes its price. action list returns every such change not yet acknowledged; action acknowledge mar"},{"name":"get_automation","description":"Reads one automation in one of three views. details: its name, status, number, the live version, what it clashes with while it is on and, on request, its versio"},{"name":"manage_automation","description":"Changes an existing automation without editing its logic. update sets the name or description; copy makes a custom copy on the same number, switched off, with i"},{"name":"test_automation","description":"Runs the newest version of an automation once on a sample customer and sends to no one: each step is recorded as what it would have done. payload lays trigger f"},{"name":"run_automation","description":"Starts one run of an automation now, as its manual trigger does, with payload as the trigger’s data. The automation then acts as it was built to, which can incl"},{"name":"cancel_run","description":"Cancels a run that has not finished, as a stop: it needs no confirmation. Messages the run already sent stay sent. Returns the run as it is after the cancel."},{"name":"get_automation_catalogue","description":"Returns every block and trigger an automation document can use, with each one’s inputs and outputs: what is needed to write the ir of an automation. Read-only."},{"name":"automation_recipes","description":"Works with the recipe library. action list returns the published recipes as cards, one page at a time. action instantiate fills one recipe in with params and re"},{"name":"get_reply_order","description":"Returns the order in which one WhatsApp number’s automations answer a customer’s message. The order follows from the automations themselves. Read-only."},{"name":"list_members","description":"Lists the people in this workspace and its pending invitations, each with role, status and email, and what the next seat costs. Names are typed by the people th"},{"name":"get_billing","description":"Reads the workspace’s billing in one of four views. subscription: plan, status, billing period and whether payment is overdue. plans: the plans it may move to, "},{"name":"get_report","description":"Reads one card of Reports for a period: how fast chats were answered by the AI receptionist and by people (response), what the receptionist answered alone and h"},{"name":"get_data_policy","description":"Returns what the workspace keeps, in which group and for how long, and any queued erasure of the whole workspace. Read-only."},{"name":"upload_media","description":"Uploads one file to a WhatsApp number’s media library and returns its media id (med_…), which a message, the number’s profile picture or the AI assistant’s know"},{"name":"get_assistant_persona","description":"Reads the persona of one AI assistant, named by id (an automation of this workspace that has an AI step): business name, what the business does, tone, whether i"},{"name":"update_assistant_persona","description":"Changes the persona of one AI assistant, named by id. Only the fields sent change; a list (links, never_say) is the whole new list. The fields are typed (busine"},{"name":"get_knowledge","description":"Reads one AI assistant’s knowledge, named by id. view sources lists every source with its kind (file, text, website, Google place), status (queued, ready, faile"},{"name":"change_knowledge","description":"Changes one AI assistant’s knowledge, named by id. action add takes a kind: file (media_id of a file uploaded on the assistant’s number), text (text, with an op"},{"name":"try_assistant","description":"Asks one AI assistant (automation_id) a customer’s question and returns what it would do: its reply, the intent and confidence it read, the knowledge sources it"},{"name":"get_business_profile","description":"Reads the WhatsApp business profile customers see for one number, named by id, from Meta: about, description, address, email, websites, industry and the picture"},{"name":"update_number","description":"Changes one WhatsApp number, named by id. action settings takes delivery_mode (stored or direct) and override_callback_url (where Meta’s webhooks for the number"},{"name":"manage_number","description":"Looks after one WhatsApp number, named by id. action sync refreshes the number’s state, quality rating and limits from Meta and returns the connection. action r"},{"name":"read_integration","description":"Reads what one connected integration account holds, named by id. view spreadsheets lists the spreadsheets a Google account can open (the ones Cosend made or a p"},{"name":"manage_integration","description":"Manages one connected integration account, named by id; the account returns no credential. action update takes name and config (non-secret settings only). actio"},{"name":"create_spreadsheet","description":"Makes a spreadsheet in a connected Google account, named by id: its title, one tab, the header columns (with a type each, text by default) and, optionally, one "},{"name":"get_authoring_chat","description":"Reads the AI authoring chats of this workspace, where an owner describes an automation in words and Cosend builds it switched off. view list returns one number’"},{"name":"describe_automation","description":"Builds an automation from a description, as the Describe it chat in Cosend does. action start opens a chat on one WhatsApp number (connection_id), optionally on"},{"name":"get_approvals","description":"Reads the human-decision queue. view list returns approvals newest first, one page at a time, optionally filtered by state; a member sees the queue of their own"},{"name":"request_approval","description":"Holds an action for a human decision: action (a type from the approval action types), preview (exactly what the person is shown, up to 4096 characters), argumen"}],"toolCount":85,"toolsHash":"3a93df6c42317b0d53214a84078a1e3239439ae79b18bdc794984c966d7a99c7","serverName":"cosend","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T14:22:58.994Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":177,"error":null,"detail":{"tools":[{"name":"whoami","description":"Returns the Cosend workspace, plan and connected WhatsApp numbers for the credential in use, and the permissions it was granted, which decide which tools the cr"},{"name":"list_conversations","description":"Lists conversations in this workspace, newest activity first, one page at a time, each with its id. Each record carries its contact and its newest message only,"},{"name":"search_conversations","description":"Finds conversations by what they contain. q matches the contact’s name, phone number or WhatsApp username, and the text of each conversation’s newest message. R"},{"name":"read_conversation","description":"Lists the messages of one conversation, named by conversation_id (or of one contact, by contact_id), oldest first, one page at a time. With neither, it lists re"},{"name":"send_message","description":"Sends one WhatsApp message into one conversation that already exists, named by conversation_id. It reaches a real person on their phone and cannot be unsent. It"},{"name":"list_contacts","description":"Lists contacts in this workspace, one page at a time, optionally filtered, each with its id. Contact display names come from the contacts themselves and are unt"},{"name":"upsert_contact","description":"Creates a contact, or updates the one that already exists for that phone number or BSUID (the business-scoped user id Meta sends; a contact may have one and no "},{"name":"set_contact_consent","description":"Records a contact's marketing or utility consent as a new entry in an append-only ledger. Nothing is overwritten and nothing is deleted, so this is an audit rec"},{"name":"list_templates","description":"Lists this workspace’s WhatsApp message templates, one page at a time, with Meta’s review status, whether each can be sent right now (sendable) and, for a rejec"},{"name":"submit_template","description":"Creates a new WhatsApp message template and sends it to Meta for review. This leaves Cosend: Meta reviews every template (a decision can take up to 24 hours), a"},{"name":"list_automations","description":"Lists this workspace’s automations, one page at a time, with each one’s status, the version that is live, and today’s runs and failures. Read-only."},{"name":"validate_automation","description":"Checks an automation document (ir) with Cosend’s compiler and returns its full report: every error with a JSON pointer into the document and, where one exists, "},{"name":"upsert_automation","description":"Writes a new automation, or a new version of an existing one, from an automation document (ir). Without id it creates one: name, connection_id (the WhatsApp num"},{"name":"deploy_automation","description":"Compiles an automation’s version and stores the result so it can be switched on. It does not switch the automation on. It deploys only on a confirmed call: with"},{"name":"set_automation_state","description":"Switches an automation on or off. state \"disable\" is the emergency stop: it takes effect at once and needs no confirmation. state \"enable\" switches it on, and f"},{"name":"list_runs","description":"Lists automation runs, newest first, one page at a time, with each run’s status, how long it took and what it sent. Read-only."},{"name":"get_run","description":"Reads one automation run and its step-by-step trace: under run, the run’s status, timings, what it sent and why it failed; under steps, each step it took with i"},{"name":"get_usage","description":"Reports this workspace’s usage for one billing period against what its plan includes. Read-only."},{"name":"resolve_conversation","description":"Marks one conversation Done, as the Done button in the Cosend Inbox does. Nothing is sent to anyone and no automation starts. Afterwards no person holds the con"},{"name":"create_setup_link","description":"Makes a link for the person in this chat to open in their own browser, signed in to Cosend, to do one set-up step only they can do there, and returns its url. I"},{"name":"check_setup_link","description":"Reads a set-up link’s status. status open means the step has not happened yet; completed means it has, and result says what was set up; expired means its 30 min"},{"name":"cancel_setup_link","description":"Cancels an open set-up link so its page stops working, for example when the person changed their mind or the link asks for the wrong thing. A link already compl"},{"name":"whatsapp_link","description":"Makes a wa.me chat link and its QR code (an SVG image) for a WhatsApp number, with an opening message if one is given. country is the two-letter ISO code and nu"},{"name":"template_check","description":"Checks a WhatsApp message template (category, language, components and example values, as Meta takes them) against Meta’s rules, which are errors, and the warni"},{"name":"message_cost","description":"Returns Meta’s list price for one delivered WhatsApp message in a country, for each category (marketing, utility, authentication, service), in one of Meta’s 16 "},{"name":"get_conversation","description":"Reads one conversation, named by id. view conversation returns the chat itself: its contact and newest message, its state, who it is assigned to, its labels, pr"},{"name":"search_messages","description":"Searches the text of every message in the workspace, newest first, 20 hits to a page. Each hit has the message id, the conversation id and number it belongs to,"},{"name":"get_message","description":"Reads one message, named by its msg_ id or by the WhatsApp message id (wamid): its type and content, direction, delivery status with the time of each step, who "},{"name":"get_media","description":"Reads one media file, named by its med_ id (a message’s media block carries it): its type, file name, size and state, and a signed link to download it that work"},{"name":"get_inbox_overview","description":"Reads the figures the Inbox and Home show, one part at a time. part counts returns how many chats are waiting for a person, assigned to the caller, unread, open"},{"name":"mark_read","description":"Marks read, in one of three ways, with id naming a conversation (cosend, phone_thread) or a message (phone_message). where cosend clears the chat’s unread state"},{"name":"translate_message","description":"Translates one message, named by id, into target_language (a language tag such as es or pt-BR) and returns the text with the language it was written in. The fir"},{"name":"draft_reply","description":"Writes a reply the person could send in one conversation, named by id, from the WhatsApp number’s AI assistant (its persona and knowledge) and that chat only, o"},{"name":"update_conversation","description":"Changes one conversation, named by id, by whichever of these are given: assignee_id (a member’s usr_ id; null takes the assignee off), snoozed_until (a time; nu"},{"name":"bulk_update_conversations","description":"Applies one action to up to 100 conversations named in ids: resolve marks each Done, assign sets assignee_id (null takes it off), label adds labels_add and take"},{"name":"take_over_conversation","description":"Puts one conversation, named by id, in a person’s hands: control human means a person holds it and the AI assistant and automations stop answering in it; contro"},{"name":"chat_notes","description":"Internal notes on one conversation, named by id; the customer does not see them. action list returns the notes one page at a time. action add writes a note (bod"},{"name":"inbox_views","description":"The saved views in the Inbox’s Views menu: a name and the conversation filters it applies. action list returns the caller’s own views and every one shared with "},{"name":"get_contact","description":"Reads one contact, named by id (a ct_ id, an E.164 phone number or a BSUID), in one of four views. view contact returns the contact: names, phone number or BSUI"},{"name":"update_contact","description":"Changes one contact, named by id, by whichever of these are given: name (the name the business sets, which shows first; null goes back to the WhatsApp names; ow"},{"name":"tag_contact","description":"Adds tags to, or removes tags from, one contact, named by id, without touching the rest of its tags. action add leaves a tag the contact already has as it is; a"},{"name":"delete_contact","description":"Deletes one contact, named by id. Without purge the contact is soft-deleted and drops out of lists and chats. With purge true the contact and what Cosend holds "},{"name":"merge_contacts","description":"Merges two identities of one person (a phone number and a BSUID): the contact named by id keeps going, and the one named by from is folded into it and removed. "},{"name":"contact_fields","description":"The workspace’s contact fields: the keys a contact’s attributes can hold. action list returns each field with how many contacts hold a value for it. action crea"},{"name":"import_contacts","description":"Imports contacts from a CSV file for one WhatsApp number, in four steps. step start uploads the file (connection_id; data_base64, or media_id of a text or CSV f"},{"name":"list_contact_imports","description":"Reads contact imports. Without id it lists the workspace’s imports, newest first, one page at a time (a member sees those for their own numbers). With id it ret"},{"name":"list_numbers","description":"Lists the WhatsApp numbers connected to this workspace, one page at a time, each with its id, status and health at a glance. The number ids it returns are what "},{"name":"get_number","description":"Reads one WhatsApp number in one of four views. summary: its status, quality, limits and onboarding summary. import_progress: the progress of importing the numb"},{"name":"list_connectors","description":"Lists the integrations Cosend can connect, each by its Cosend key, with how it signs in and which of its accounts this workspace already has. The key is what a "},{"name":"get_integration_accounts","description":"Lists the workspace’s connected integration accounts, one page at a time, or reads one when id is given. Each has its integration, name, status, the WhatsApp nu"},{"name":"list_google_logins","description":"Lists the Google logins connected to this workspace, each with its status and the integrations (Sheets, Calendar, Gmail) it serves. A credential is not part of "},{"name":"get_setup_guide","description":"Returns the workspace’s set-up guide: each step with its state, done, to do or skipped, worked out from what the workspace already has. It shows what is left to"},{"name":"get_template","description":"Reads one message template: its components, category, language, Meta’s review status, whether it can be sent right now and, for a rejected one, Meta’s reason in"},{"name":"change_template","description":"Changes an existing message template at Meta. action edit replaces all of its components and returns it to review (an approved template can be edited once in 24"},{"name":"sync_templates","description":"Reads the templates of one WhatsApp number from Meta now, updates what Cosend holds to match, and returns the synced list. connection_id is the number. Template"},{"name":"template_category_changes","description":"Meta sometimes moves a template to another category, which changes its price. action list returns every such change not yet acknowledged; action acknowledge mar"},{"name":"get_automation","description":"Reads one automation in one of three views. details: its name, status, number, the live version, what it clashes with while it is on and, on request, its versio"},{"name":"manage_automation","description":"Changes an existing automation without editing its logic. update sets the name or description; copy makes a custom copy on the same number, switched off, with i"},{"name":"test_automation","description":"Runs the newest version of an automation once on a sample customer and sends to no one: each step is recorded as what it would have done. payload lays trigger f"},{"name":"run_automation","description":"Starts one run of an automation now, as its manual trigger does, with payload as the trigger’s data. The automation then acts as it was built to, which can incl"},{"name":"cancel_run","description":"Cancels a run that has not finished, as a stop: it needs no confirmation. Messages the run already sent stay sent. Returns the run as it is after the cancel."},{"name":"get_automation_catalogue","description":"Returns every block and trigger an automation document can use, with each one’s inputs and outputs: what is needed to write the ir of an automation. Read-only."},{"name":"automation_recipes","description":"Works with the recipe library. action list returns the published recipes as cards, one page at a time. action instantiate fills one recipe in with params and re"},{"name":"get_reply_order","description":"Returns the order in which one WhatsApp number’s automations answer a customer’s message. The order follows from the automations themselves. Read-only."},{"name":"list_members","description":"Lists the people in this workspace and its pending invitations, each with role, status and email, and what the next seat costs. Names are typed by the people th"},{"name":"get_billing","description":"Reads the workspace’s billing in one of four views. subscription: plan, status, billing period and whether payment is overdue. plans: the plans it may move to, "},{"name":"get_report","description":"Reads one card of Reports for a period: how fast chats were answered by the AI receptionist and by people (response), what the receptionist answered alone and h"},{"name":"get_data_policy","description":"Returns what the workspace keeps, in which group and for how long, and any queued erasure of the whole workspace. Read-only."},{"name":"upload_media","description":"Uploads one file to a WhatsApp number’s media library and returns its media id (med_…), which a message, the number’s profile picture or the AI assistant’s know"},{"name":"get_assistant_persona","description":"Reads the persona of one AI assistant, named by id (an automation of this workspace that has an AI step): business name, what the business does, tone, whether i"},{"name":"update_assistant_persona","description":"Changes the persona of one AI assistant, named by id. Only the fields sent change; a list (links, never_say) is the whole new list. The fields are typed (busine"},{"name":"get_knowledge","description":"Reads one AI assistant’s knowledge, named by id. view sources lists every source with its kind (file, text, website, Google place), status (queued, ready, faile"},{"name":"change_knowledge","description":"Changes one AI assistant’s knowledge, named by id. action add takes a kind: file (media_id of a file uploaded on the assistant’s number), text (text, with an op"},{"name":"try_assistant","description":"Asks one AI assistant (automation_id) a customer’s question and returns what it would do: its reply, the intent and confidence it read, the knowledge sources it"},{"name":"get_business_profile","description":"Reads the WhatsApp business profile customers see for one number, named by id, from Meta: about, description, address, email, websites, industry and the picture"},{"name":"update_number","description":"Changes one WhatsApp number, named by id. action settings takes delivery_mode (stored or direct) and override_callback_url (where Meta’s webhooks for the number"},{"name":"manage_number","description":"Looks after one WhatsApp number, named by id. action sync refreshes the number’s state, quality rating and limits from Meta and returns the connection. action r"},{"name":"read_integration","description":"Reads what one connected integration account holds, named by id. view spreadsheets lists the spreadsheets a Google account can open (the ones Cosend made or a p"},{"name":"manage_integration","description":"Manages one connected integration account, named by id; the account returns no credential. action update takes name and config (non-secret settings only). actio"},{"name":"create_spreadsheet","description":"Makes a spreadsheet in a connected Google account, named by id: its title, one tab, the header columns (with a type each, text by default) and, optionally, one "},{"name":"get_authoring_chat","description":"Reads the AI authoring chats of this workspace, where an owner describes an automation in words and Cosend builds it switched off. view list returns one number’"},{"name":"describe_automation","description":"Builds an automation from a description, as the Describe it chat in Cosend does. action start opens a chat on one WhatsApp number (connection_id), optionally on"},{"name":"get_approvals","description":"Reads the human-decision queue. view list returns approvals newest first, one page at a time, optionally filtered by state; a member sees the queue of their own"},{"name":"request_approval","description":"Holds an action for a human decision: action (a type from the approval action types), preview (exactly what the person is shown, up to 4096 characters), argumen"}],"toolCount":84,"toolsHash":"300788a11ad3ea8d3826428b87fa8990ed6d49416dc51f4131031c34f1231c2b","serverName":"cosend","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"whoami","description":"Returns the Cosend workspace, plan and connected WhatsApp numbers for the credential in use, and the permissions it was granted, which decide which tools the cr"},{"name":"list_conversations","description":"Lists conversations in this workspace, newest activity first, one page at a time, each with its id. Each record carries its contact and its newest message only,"},{"name":"search_conversations","description":"Finds conversations by what they contain. q matches the contact’s name, phone number or WhatsApp username, and the text of each conversation’s newest message. R"},{"name":"read_conversation","description":"Lists the messages of one conversation, named by conversation_id (or of one contact, by contact_id), oldest first, one page at a time. With neither, it lists re"},{"name":"send_message","description":"Sends one WhatsApp message into one conversation that already exists, named by conversation_id. It reaches a real person on their phone and cannot be unsent. It"},{"name":"list_contacts","description":"Lists contacts in this workspace, one page at a time, optionally filtered, each with its id. Contact display names come from the contacts themselves and are unt"},{"name":"upsert_contact","description":"Creates a contact, or updates the one that already exists for that phone number or BSUID (the business-scoped user id Meta sends; a contact may have one and no "},{"name":"set_contact_consent","description":"Records a contact's marketing or utility consent as a new entry in an append-only ledger. Nothing is overwritten and nothing is deleted, so this is an audit rec"},{"name":"list_templates","description":"Lists this workspace’s WhatsApp message templates, one page at a time, with Meta’s review status, whether each can be sent right now (sendable) and, for a rejec"},{"name":"submit_template","description":"Creates a new WhatsApp message template and sends it to Meta for review. This leaves Cosend: Meta reviews every template (a decision can take up to 24 hours), a"},{"name":"list_automations","description":"Lists this workspace’s automations, one page at a time, with each one’s status, the version that is live, and today’s runs and failures. Read-only."},{"name":"validate_automation","description":"Checks an automation document (ir) with Cosend’s compiler and returns its full report: every error with a JSON pointer into the document and, where one exists, "},{"name":"upsert_automation","description":"Writes a new automation, or a new version of an existing one, from an automation document (ir). Without id it creates one: name, connection_id (the WhatsApp num"},{"name":"deploy_automation","description":"Compiles an automation’s version and stores the result so it can be switched on. It does not switch the automation on. It deploys only on a confirmed call: with"},{"name":"set_automation_state","description":"Switches an automation on or off. state \"disable\" is the emergency stop: it takes effect at once and needs no confirmation. state \"enable\" switches it on, and f"},{"name":"list_runs","description":"Lists automation runs, newest first, one page at a time, with each run’s status, how long it took and what it sent. Read-only."},{"name":"get_run","description":"Reads one automation run and its step-by-step trace: under run, the run’s status, timings, what it sent and why it failed; under steps, each step it took with i"},{"name":"get_usage","description":"Reports this workspace’s usage for one billing period against what its plan includes. Read-only."},{"name":"resolve_conversation","description":"Marks one conversation Done, as the Done button in the Cosend Inbox does. Nothing is sent to anyone and no automation starts. Afterwards no person holds the con"},{"name":"create_setup_link","description":"Makes a link for the person in this chat to open in their own browser, signed in to Cosend, to do one set-up step only they can do there, and returns its url. I"},{"name":"check_setup_link","description":"Reads a set-up link’s status. status open means the step has not happened yet; completed means it has, and result says what was set up; expired means its 30 min"},{"name":"cancel_setup_link","description":"Cancels an open set-up link so its page stops working, for example when the person changed their mind or the link asks for the wrong thing. A link already compl"},{"name":"whatsapp_link","description":"Makes a wa.me chat link and its QR code (an SVG image) for a WhatsApp number, with an opening message if one is given. country is the two-letter ISO code and nu"},{"name":"template_check","description":"Checks a WhatsApp message template (category, language, components and example values, as Meta takes them) against Meta’s rules, which are errors, and the warni"},{"name":"message_cost","description":"Returns Meta’s list price for one delivered WhatsApp message in a country, for each category (marketing, utility, authentication, service), in one of Meta’s 16 "},{"name":"get_conversation","description":"Reads one conversation, named by id. view conversation returns the chat itself: its contact and newest message, its state, who it is assigned to, its labels, pr"},{"name":"search_messages","description":"Searches the text of every message in the workspace, newest first, 20 hits to a page. Each hit has the message id, the conversation id and number it belongs to,"},{"name":"get_message","description":"Reads one message, named by its msg_ id or by the WhatsApp message id (wamid): its type and content, direction, delivery status with the time of each step, who "},{"name":"get_media","description":"Reads one media file, named by its med_ id (a message’s media block carries it): its type, file name, size and state, and a signed link to download it that work"},{"name":"get_inbox_overview","description":"Reads the figures the Inbox and Home show, one part at a time. part counts returns how many chats are waiting for a person, assigned to the caller, unread, open"},{"name":"mark_read","description":"Marks read, in one of three ways, with id naming a conversation (cosend, phone_thread) or a message (phone_message). where cosend clears the chat’s unread state"},{"name":"translate_message","description":"Translates one message, named by id, into target_language (a language tag such as es or pt-BR) and returns the text with the language it was written in. The fir"},{"name":"draft_reply","description":"Writes a reply the person could send in one conversation, named by id, from the WhatsApp number’s AI assistant (its persona and knowledge) and that chat only, o"},{"name":"update_conversation","description":"Changes one conversation, named by id, by whichever of these are given: assignee_id (a member’s usr_ id; null takes the assignee off), snoozed_until (a time; nu"},{"name":"bulk_update_conversations","description":"Applies one action to up to 100 conversations named in ids: resolve marks each Done, assign sets assignee_id (null takes it off), label adds labels_add and take"},{"name":"take_over_conversation","description":"Puts one conversation, named by id, in a person’s hands: control human means a person holds it and the AI assistant and automations stop answering in it; contro"},{"name":"ask_for_conversation","description":"Asks the person who holds one conversation, named by id, in the Cosend Inbox to hand it over; reason is an optional note for them. They get a hand-over prompt: "},{"name":"chat_notes","description":"Internal notes on one conversation, named by id; the customer does not see them. action list returns the notes one page at a time. action add writes a note (bod"},{"name":"inbox_views","description":"The saved views in the Inbox’s Views menu: a name and the conversation filters it applies. action list returns the caller’s own views and every one shared with "},{"name":"get_contact","description":"Reads one contact, named by id (a ct_ id, an E.164 phone number or a BSUID), in one of four views. view contact returns the contact: names, phone number or BSUI"},{"name":"update_contact","description":"Changes one contact, named by id, by whichever of these are given: name (the name the business sets, which shows first; null goes back to the WhatsApp names; ow"},{"name":"tag_contact","description":"Adds tags to, or removes tags from, one contact, named by id, without touching the rest of its tags. action add leaves a tag the contact already has as it is; a"},{"name":"delete_contact","description":"Deletes one contact, named by id. Without purge the contact is soft-deleted and drops out of lists and chats. With purge true the contact and what Cosend holds "},{"name":"merge_contacts","description":"Merges two identities of one person (a phone number and a BSUID): the contact named by id keeps going, and the one named by from is folded into it and removed. "},{"name":"contact_fields","description":"The workspace’s contact fields: the keys a contact’s attributes can hold. action list returns each field with how many contacts hold a value for it. action crea"},{"name":"import_contacts","description":"Imports contacts from a CSV file for one WhatsApp number, in four steps. step start uploads the file (connection_id; data_base64, or media_id of a text or CSV f"},{"name":"list_contact_imports","description":"Reads contact imports. Without id it lists the workspace’s imports, newest first, one page at a time (a member sees those for their own numbers). With id it ret"},{"name":"list_numbers","description":"Lists the WhatsApp numbers connected to this workspace, one page at a time, each with its id, status and health at a glance. The number ids it returns are what "},{"name":"get_number","description":"Reads one WhatsApp number in one of four views. summary: its status, quality, limits and onboarding summary. import_progress: the progress of importing the numb"},{"name":"list_connectors","description":"Lists the integrations Cosend can connect, each by its Cosend key, with how it signs in and which of its accounts this workspace already has. The key is what a "},{"name":"get_integration_accounts","description":"Lists the workspace’s connected integration accounts, one page at a time, or reads one when id is given. Each has its integration, name, status, the WhatsApp nu"},{"name":"list_google_logins","description":"Lists the Google logins connected to this workspace, each with its status and the integrations (Sheets, Calendar, Gmail) it serves. A credential is not part of "},{"name":"get_setup_guide","description":"Returns the workspace’s set-up guide: each step with its state, done, to do or skipped, worked out from what the workspace already has. It shows what is left to"},{"name":"get_template","description":"Reads one message template: its components, category, language, Meta’s review status, whether it can be sent right now and, for a rejected one, Meta’s reason in"},{"name":"change_template","description":"Changes an existing message template at Meta. action edit replaces all of its components and returns it to review (an approved template can be edited once in 24"},{"name":"sync_templates","description":"Reads the templates of one WhatsApp number from Meta now, updates what Cosend holds to match, and returns the synced list. connection_id is the number. Template"},{"name":"template_category_changes","description":"Meta sometimes moves a template to another category, which changes its price. action list returns every such change not yet acknowledged; action acknowledge mar"},{"name":"get_automation","description":"Reads one automation in one of three views. details: its name, status, number, the live version, what it clashes with while it is on and, on request, its versio"},{"name":"manage_automation","description":"Changes an existing automation without editing its logic. update sets the name or description; copy makes a custom copy on the same number, switched off, with i"},{"name":"test_automation","description":"Runs the newest version of an automation once on a sample customer and sends to no one: each step is recorded as what it would have done. payload lays trigger f"},{"name":"run_automation","description":"Starts one run of an automation now, as its manual trigger does, with payload as the trigger’s data. The automation then acts as it was built to, which can incl"},{"name":"cancel_run","description":"Cancels a run that has not finished, as a stop: it needs no confirmation. Messages the run already sent stay sent. Returns the run as it is after the cancel."},{"name":"get_automation_catalogue","description":"Returns every block and trigger an automation document can use, with each one’s inputs and outputs: what is needed to write the ir of an automation. Read-only."},{"name":"automation_recipes","description":"Works with the recipe library. action list returns the published recipes as cards, one page at a time. action instantiate fills one recipe in with params and re"},{"name":"get_reply_order","description":"Returns the order in which one WhatsApp number’s automations answer a customer’s message. The order follows from the automations themselves. Read-only."},{"name":"list_members","description":"Lists the people in this workspace and its pending invitations, each with role, status and email, and what the next seat costs. Names are typed by the people th"},{"name":"get_billing","description":"Reads the workspace’s billing in one of four views. subscription: plan, status, billing period and whether payment is overdue. plans: the plans it may move to, "},{"name":"get_report","description":"Reads one card of Reports for a period: how fast chats were answered by the AI receptionist and by people (response), what the receptionist answered alone and h"},{"name":"get_data_policy","description":"Returns what the workspace keeps, in which group and for how long, and any queued erasure of the whole workspace. Read-only."},{"name":"upload_media","description":"Uploads one file to a WhatsApp number’s media library and returns its media id (med_…), which a message, the number’s profile picture or the AI assistant’s know"},{"name":"get_assistant_persona","description":"Reads the persona of one AI assistant, named by id (an automation of this workspace that has an AI step): business name, what the business does, tone, whether i"},{"name":"update_assistant_persona","description":"Changes the persona of one AI assistant, named by id. Only the fields sent change; a list (links, never_say) is the whole new list. The fields are typed (busine"},{"name":"get_knowledge","description":"Reads one AI assistant’s knowledge, named by id. view sources lists every source with its kind (file, text, website, Google place), status (queued, ready, faile"},{"name":"change_knowledge","description":"Changes one AI assistant’s knowledge, named by id. action add takes a kind: file (media_id of a file uploaded on the assistant’s number), text (text, with an op"},{"name":"try_assistant","description":"Asks one AI assistant (automation_id) a customer’s question and returns what it would do: its reply, the intent and confidence it read, the knowledge sources it"},{"name":"get_business_profile","description":"Reads the WhatsApp business profile customers see for one number, named by id, from Meta: about, description, address, email, websites, industry and the picture"},{"name":"update_number","description":"Changes one WhatsApp number, named by id. action settings takes delivery_mode (stored or direct) and override_callback_url (where Meta’s webhooks for the number"},{"name":"manage_number","description":"Looks after one WhatsApp number, named by id. action sync refreshes the number’s state, quality rating and limits from Meta and returns the connection. action r"},{"name":"read_integration","description":"Reads what one connected integration account holds, named by id. view spreadsheets lists the spreadsheets a Google account can open (the ones Cosend made or a p"},{"name":"manage_integration","description":"Manages one connected integration account, named by id; the account returns no credential. action update takes name and config (non-secret settings only). actio"},{"name":"create_spreadsheet","description":"Makes a spreadsheet in a connected Google account, named by id: its title, one tab, the header columns (with a type each, text by default) and, optionally, one "},{"name":"get_authoring_chat","description":"Reads the AI authoring chats of this workspace, where an owner describes an automation in words and Cosend builds it switched off. view list returns one number’"},{"name":"describe_automation","description":"Builds an automation from a description, as the Describe it chat in Cosend does. action start opens a chat on one WhatsApp number (connection_id), optionally on"},{"name":"get_approvals","description":"Reads the human-decision queue. view list returns approvals newest first, one page at a time, optionally filtered by state; a member sees the queue of their own"},{"name":"request_approval","description":"Holds an action for a human decision: action (a type from the approval action types), preview (exactly what the person is shown, up to 4096 characters), argumen"}],"package":null,"toolSurface":{"id":"ts_vcepqqwj47ub","endpointId":"ep_9x367xdegzwc","hash":"3a93df6c42317b0d53214a84078a1e3239439ae79b18bdc794984c966d7a99c7","toolCount":85,"serverName":"cosend","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-04T22:23:51.947Z","lastSeenAt":"2026-11-04T22:23:51.947Z","observations":1,"toolNames":["whoami","list_conversations","search_conversations","read_conversation","send_message","list_contacts","upsert_contact","set_contact_consent","list_templates","submit_template","list_automations","validate_automation","upsert_automation","deploy_automation","set_automation_state","list_runs","get_run","get_usage","resolve_conversation","create_setup_link","check_setup_link","cancel_setup_link","whatsapp_link","template_check","message_cost","get_conversation","search_messages","get_message","get_media","get_inbox_overview","mark_read","translate_message","draft_reply","update_conversation","bulk_update_conversations","take_over_conversation","ask_for_conversation","chat_notes","inbox_views","get_contact","update_contact","tag_contact","delete_contact","merge_contacts","contact_fields","import_contacts","list_contact_imports","list_numbers","get_number","list_connectors","get_integration_accounts","list_google_logins","get_setup_guide","get_template","change_template","sync_templates","template_category_changes","get_automation","manage_automation","test_automation","run_automation","cancel_run","get_automation_catalogue","automation_recipes","get_reply_order","list_members","get_billing","get_report","get_data_policy","upload_media","get_assistant_persona","update_assistant_persona","get_knowledge","change_knowledge","try_assistant","get_business_profile","update_number","manage_number","read_integration","manage_integration","create_spreadsheet","get_authoring_chat","describe_automation","get_approvals","request_approval"],"distinctSurfaces":2},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"app.cosend/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/app.cosend%2Fmcp","firstSeenAt":"2026-11-04T12:17:53.717Z","fetchedAt":"2026-11-04T12:17:53.717Z","normalizedAt":"2026-11-04T12:17:53.717Z"}]},"firstSeenAt":"2026-11-04T12:17:53.717Z","updatedAt":"2026-11-04T22:27:19.413Z"}