MCP server for Meshes — emit events, manage workspaces, create rules, and inspect deliveries from any MCP-compatible client.
The Meshes MCP server demonstrates strong tool definition quality overall. All 32 tools are explicitly registered with names, descriptions, and input schemas. Tool naming follows verb_noun patterns consistently (list_, get_, create_, update_, delete_, emit_, retry_). Descriptions are detailed and contextual, ranging from 100-300+ characters and explaining WHAT the tool does and WHEN to use it. However, there are notable issues: (1) Several tools have enum parameters with empty enum arrays (e.g., meshes_create_connection 'type' field has enum:[] with no values defined), making those parameters effectively unconstrained. (2) Some output schemas are not explicitly documented in the visible code, while the underlying API client likely returns structured data, the MCP tool definitions do not show expected response shapes. (3) Parameter descriptions occasionally lack format/constraint details (e.g., resource_id pattern is documented in one tool but not consistently across others). (4) A few tools accept generic 'object' types (metadata, metadata_extra, payload) without schema guidance on expected sub-fields. Despite these gaps, the overall quality is above average for the community: tool names are clear and action-oriented, descriptions guide LLM selection well, and input parameter types are declared. The risk annotations (READ_ONLY, WRITE, DESTRUCTIVE) are helpful for agent safety but not formally part of the MCP spec.
Create a new connection (destination) in a workspace. The metadata object contains connector-specific configuration (API keys, OAuth tokens, webhook URLs, etc.).
Create a routing rule that binds an event type to a connection. The metadata.action field is required and determines what the destination does (e.g., 'create_or_update_contact'). Use meshes_get_connection_actions to discover available actions.
Mint a new embedded session with an access token and launch URL. Sessions can target full workspaces, dashboard-only views, or resource-scoped embeds.
Create a new workspace. Typically used when onboarding a new tenant in a multi-tenant SaaS app.
Delete a connection. Returns 409 if it has active rules unless force_delete is true.
meshes_create_connection 'type' parameter has empty enum array (enum:[]). LLMs cannot infer valid values and will guess, causing API failures. Either populate the enum with all valid integration types (hubspot, salesforce, resend, etc.) or remove the enum constraint and document valid types in the description.
Several tools accept generic 'object' type parameters (metadata, metadata_extra, payload, schema) without documenting expected sub-fields or structure. For meshes_emit_event, the 'payload' field is critical but lacks schema detail on required vs optional sub-fields. LLMs will struggle to construct valid payloads without examples or a field catalog.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Delete a routing rule. Events matching this rule will no longer be routed to its connection.
Emit up to 100 events in a single request. Because this MCP server uses organization-level machine credentials, each event must include workspace. Returns 201 on full success, 207 on partial success with per-event error details.
Emit a product event to Meshes for routing and delivery. Because this MCP server uses organization-level machine credentials, workspace is required for each emitted event. Always include 'email' in the payload for person-related events.
Get details of a specific connection. Does not expose raw credentials.
Get available actions for a connection (e.g., create_or_update_contact, add_to_list). Use this to discover what actions to put in rule metadata.
Get the default field mapping for a connection. Mappings define how event payload fields map to destination fields with optional transforms (trim, lower, upper, to_string, etc.).
Get the destination field catalog for a connection. Returns field keys, types, constraints, and allowed values. Useful for building field mappings.
Get event details including delivery status and per-rule results (rule_events). Each rule_event shows connection, integration_type, status, attempt_count, and last_error.
Get event details including the full event payload. Useful for debugging what data was sent.
Get details of a specific routing rule by UUID.
Get details of a specific workspace by UUID, including its publishable key for client-side event ingestion.
List all connections scoped to a specific workspace.
List the event types configured for a workspace, including each key, label, description, and active state.
List events for a workspace with optional filters. Useful for checking delivery status, debugging, or monitoring event flow.
List the resource types configured for a workspace, including each key, label, description, and active state.
List routing rules scoped to a specific workspace, with optional event and resource filters.
List all connections across the organization. Connections are configured destinations (HubSpot, Salesforce, Resend, webhooks, etc.) holding credentials and config.
List events across the organization with pagination.
List all routing rules across the organization. Rules bind event types to connections with action metadata. Supports filtering by event, resource, and resource_id.
List embedded sessions for a workspace with optional pagination, status, and resource filters.
List all workspaces in the Meshes organization. Workspaces are tenant-scoped containers holding connections, rules, and event logs. In multi-tenant apps, each customer typically has one workspace.
Refresh the access token for an existing session without minting a new session record.
Manually retry a failed rule delivery for a specific event. Use after investigating and fixing the underlying issue (e.g., expired credentials, misconfigured mapping).
Revoke an active embedded session.
Update a connection's name, metadata, or visibility.
Store or replace the default field mapping for a connection. Supply a schema with destination fields, payload sources, and optional transforms like trim, lower, default, or type conversion.
Update a workspace's name and description.
Output schemas are not explicitly documented in tool definitions. While the underlying API client (MeshesApiClient) returns typed responses, the MCP tool registrations do not declare what fields clients should expect. This forces LLMs to infer output structure or make follow-up calls to verify data shape. Document return types for all tools, especially list tools and discovery tools.
Pagination is implemented (limit, cursor parameters) for several list tools, but limit constraints vary inconsistently. meshes_get_workspace_events specifies 1-200, meshes_list_sessions specifies 1-200, but meshes_list_rules and meshes_list_events lack explicit limit bounds. This inconsistency can confuse agents and lead to suboptimal pagination behavior.
Error handling and recovery guidance are not visible in tool definitions. No descriptions state what errors are retryable, which require user action, or how to recover (e.g., 'If you get a 409 Conflict on delete_connection, call get_connection_rules first to see what rules depend on it'). This violates the recovery-guide pattern and leaves agents without actionable error paths.
The meshes_emit_event tool requires a 'workspace' parameter at the org level, which is unconventional. The description notes 'workspace is required for each emitted event' because the MCP server uses org-level machine credentials. However, the reason WHY (org-level auth) is not LLM-friendly and increases cognitive load. Consider documenting this trade-off or offering a workspace-scoped variant.