{"apiVersion":"v1","directorySlug":"usehearsay-mcp-01ce02eb26","title":"Text Message Evidence Collection for Law Firms | Hearsay","description":"Hearsay collects text messages, email and social media from client phones for court, with review tools built for family law and employment litigation firms.","pageUrl":"https://www.mcpbundles.com/skills/usehearsay-mcp-01ce02eb26","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.usehearsay.com/","hostedMcpUrl":null,"toolCount":18,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"com.usehearsay/usehearsay-mcp-01ce02eb26","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"debug_ping","description":"Diagnostic only. Calls GET /organization/user/organizations and returns the raw HTTP status and response body, with no JMESPath and no error handling, so a failing deploy can be inspected from the client.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema"},"logicalName":"debug_ping","displayName":"debug_ping","title":"debug_ping","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_my_organizations","description":"List the organizations (law firms) the signed-in user belongs to, with each one's id. Use this first when the organization id is unknown or the user belongs to several firms - the id is what every other tool acts in. Returns parallel arrays of ids and names.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema"},"logicalName":"list_my_organizations","displayName":"list_my_organizations","title":"list_my_organizations","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_cases","description":"List the cases in the organization, most recently updated first, with their id, name, matter id, status, priority and how many extraction codes and conversations each has. Use this for \"what cases do we have?\" or to find a case id by name. May include cases another firm shared with you - confirm a case is the right one before acting on it. For a text search use find_cases instead.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":[],"properties":{"page":{"type":"number","default":1},"status":{"enum":["open","closed","archived","pending"],"type":"string","default":"open"}}},"logicalName":"list_cases","displayName":"list_cases","title":"list_cases","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"find_cases","description":"Search cases in the organization by name or matter text (3-100 characters). Returns matching cases with their ids. Use this when the user names a case (\"the Doe matter\") and you need its id.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["search_text"],"properties":{"search_text":{"type":"string"}}},"logicalName":"find_cases","displayName":"find_cases","title":"find_cases","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_case","description":"Get one case by id: name, slug, status, priority, matter id, description, conversation count, number of extraction codes, the members who have access and any pending invitations. Use this to confirm you have the right case before creating codes or exports.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id"],"properties":{"case_id":{"type":"string"}}},"logicalName":"get_case","displayName":"get_case","title":"get_case","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_case","description":"Create a new case (matter) in the organization. The caller becomes the case owner. Returns the new case id - save it, every later step needs it. Requires an active plan (a 403 means there is none; tell the human). Do not create a case that may already exist: run find_cases first.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["name","due_date"],"properties":{"name":{"type":"string"},"due_date":{"type":"string"},"priority":{"enum":["low","medium","high","urgent"],"type":"string","default":"low"},"matter_id":{"type":"string","default":""}}},"logicalName":"create_case","displayName":"create_case","title":"create_case","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_extraction_code","description":"Create an extraction code for a custodian (the person whose phone holds the evidence) and email it to them. The custodian enters the code in the Hearsay desktop app, connects their phone, and the data uploads into the case. Returns the code value and its id. Use this once per custodian after create_case. The agent cannot collect phone data itself; after this, poll check_collection_status.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","custodian_name","custodian_email","due_date"],"properties":{"label":{"type":"string","default":"Primary phone"},"case_id":{"type":"string"},"due_date":{"type":"string"},"send_email":{"type":"boolean","default":true},"custodian_name":{"type":"string"},"custodian_email":{"type":"string"},"requested_sources":{"type":"array","default":["ios","android"]}}},"logicalName":"create_extraction_code","displayName":"create_extraction_code","title":"create_extraction_code","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_extraction_codes","description":"List every extraction code on a case with its custodian, label, due date, upload status and whether the due date has passed. Use this to answer \"who still hasn't uploaded?\" or to find a code value.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id"],"properties":{"case_id":{"type":"string"}}},"logicalName":"list_extraction_codes","displayName":"list_extraction_codes","title":"list_extraction_codes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"check_collection_status","description":"Check whether the custodian's phone data has arrived in the case. Returns one entry per extraction code with its data sources (type \"ios\" or \"android\" for phones), each with status, item count, device name and sourceId. The sourceId of a completed phone source is the device_id needed by list_conversations and start_export. Also returns ready_devices: the sourceIds of sources already completed. Poll this every few minutes, not every few seconds - an upload can take hours and a custodian may take","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id"],"properties":{"case_id":{"type":"string"}}},"logicalName":"check_collection_status","displayName":"check_collection_status","title":"check_collection_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_conversations","description":"List the conversations (iMessage/SMS threads, WhatsApp chats, call logs, etc.) collected from one phone in a case, with each conversation's id, participant name, source app, message count and first/last message dates. Use this to choose which conversations to review or export. Returns 50 per page.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","device_id"],"properties":{"page":{"type":"number","default":1},"case_id":{"type":"string"},"device_id":{"type":"string"}}},"logicalName":"list_conversations","displayName":"list_conversations","title":"list_conversations","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_messages","description":"Full-text (fuzzy) search of the messages collected in a case. Returns matching messages with the match highlighted, the sender, the conversation, the date and the message id (needed by tag_messages). Use this for \"find messages about the lease\", \"did she ever mention the car\". Dates are the phone's local time; report them as-is.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","search_text"],"properties":{"page":{"type":"number","default":1},"case_id":{"type":"string"},"search_text":{"type":"string"}}},"logicalName":"search_messages","displayName":"search_messages","title":"search_messages","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_messages","description":"Read the messages of one conversation in order (oldest first), 50 per page, with sender, text, date, attachments flag and tags. Use this to review a specific thread found with list_conversations. Each message's id can be passed to tag_messages.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","conversation_id"],"properties":{"page":{"type":"number","default":1},"case_id":{"type":"string"},"conversation_id":{"type":"string"}}},"logicalName":"list_messages","displayName":"list_messages","title":"list_messages","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_case_tag","description":"Create a tag on a case (e.g. \"Relevant\", \"Privileged\", \"Hot doc\") so it can be applied to messages and used to narrow an export. Returns the tag id and name. Check existing tags with list_case_tags first to avoid duplicates.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","name"],"properties":{"name":{"type":"string"},"case_id":{"type":"string"},"severity":{"enum":["info","warning","danger"],"type":"string","default":"info"}}},"logicalName":"create_case_tag","displayName":"create_case_tag","title":"create_case_tag","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_case_tags","description":"List the tags defined on a case with their ids, names and severity.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id"],"properties":{"case_id":{"type":"string"}}},"logicalName":"list_case_tags","displayName":"list_case_tags","title":"list_case_tags","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"tag_messages","description":"Apply one or more tags to many messages at once (up to 1,000 message ids and 200 tags per call). Tags can be given by name or id; create them first with create_case_tag. Prefer this over tagging messages one at a time. Use it to mark the messages relevant to the case before exporting with a tag filter.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","message_ids","tags"],"properties":{"tags":{"type":"array"},"case_id":{"type":"string"},"message_ids":{"type":"array"}}},"logicalName":"tag_messages","displayName":"tag_messages","title":"tag_messages","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"start_export","description":"Start a background export of the conversations collected from ONE phone in a case, in the chosen format (PDF by default; RSMF for Relativity; also csv, text, doc). Returns the export id. The export runs for minutes to hours: poll get_export_download every 30-60 seconds until status is \"completed\". Always get a human's confirmation before calling this. Requires an active plan and admin access to the case.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","device_id"],"properties":{"format":{"enum":["pdf","rsmf","csv","text","doc"],"type":"string","default":"pdf"},"case_id":{"type":"string"},"sort_by":{"enum":["old-to-new","new-to-old"],"type":"string","default":"old-to-new"},"timezone":{"type":"string","default":"America/Los_Angeles"},"device_id":{"type":"string"}}},"logicalName":"start_export","displayName":"start_export","title":"start_export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_export_download","description":"Check an export's status and, once it is completed, return a temporary signed download URL (valid up to 24 hours). While the export is still running it returns status and progress only - call again in 30-60 seconds. If status is \"failed\", error_message says why; the export can be rerun with rerun_export. Do not store or share the signed URL; anyone holding it can download the file while it is valid.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","export_id"],"properties":{"case_id":{"type":"string"},"export_id":{"type":"string"}}},"logicalName":"get_export_download","displayName":"get_export_download","title":"get_export_download","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"rerun_export","description":"Re-queue an export that failed or did not finish, with the same settings. A completed export cannot be rerun - start a new one with start_export instead.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["case_id","export_id"],"properties":{"case_id":{"type":"string"},"export_id":{"type":"string"}}},"logicalName":"rerun_export","displayName":"rerun_export","title":"rerun_export","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Text-Message-Evidence-Collection-for-Law-Firms-Hearsay&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AudXNlaGVhcnNheS5jb20vIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Text-Message-Evidence-Collection-for-Law-Firms-Hearsay%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.usehearsay.com%2F%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Text-Message-Evidence-Collection-for-Law-Firms-Hearsay%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.usehearsay.com%2F%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Text+Message+Evidence+Collection+for+Law+Firms+%7C+Hearsay&connectorUrl=https%3A%2F%2Fmcp.usehearsay.com%2F"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Text-Message-Evidence-Collection-for-Law-Firms-Hearsay\" --url \"https://mcp.usehearsay.com/\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/usehearsay-mcp-01ce02eb26","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/usehearsay-mcp-01ce02eb26/tools/{tool}","mcpServerUrl":"https://mcp.usehearsay.com/","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/usehearsay-mcp-01ce02eb26?live=1"}