SignalEDI MCP Server
OfficialSignalEDI MCP Server lets you discover, scaffold, validate, test, and send X12 EDI integrations and manage QuickBooks connections, with keyless docs by default and explicit sandbox/production profiles.
Docs/local (keyless): search developer docs, fetch X12 starter schemas (850/810/856/837), generate integration code examples, render synthetic test X12, explain EDI errors, and look up X12 segments/ack codes.
Parse/validate: parse raw EDI interchanges into structured JSON and validate X12 structure (incl. aliases
parse_segments,validate_x12_structure).Transactions: list and fetch owned EDI transactions with lifecycle/SLA status.
Partner kits: list and fetch generic SignalEDI API kits, with an explicit non-partner-specific warning when applicable.
QuickBooks: check QBO connection status, list QBO entities (sandbox), sync EDI into QBO (sandbox), export QBO invoices/POs to EDI (dry run or send), and disconnect QBO (sandbox).
Connections: list/get AS2/SFTP/legacy API connections, create sandbox-first drafts, configure/test saved connections, and request go-live approval (no production activation/rollback).
Outbound: send outbound EDI documents to partners (requires confirm + idempotency key).
Profiles/scopes:
docs(default),sandbox, and explicitproduction(canonical base + opt-in) enforce least-privilege tool availability and domain scopes.
Provides tools for integrating with QuickBooks Online, including syncing EDI transactions to QBO, exporting QBO invoices and purchase orders as EDI, listing QBO entities for mapping, and managing the QBO connection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SignalEDI MCP ServerParse this EDI 850 document and summarize the errors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SignalEDI Developer MCP Server
Connect an AI coding assistant to SignalEDI to discover, scaffold, validate, and test X12 integrations. The MCP server is an AI-native developer experience over the same public guidance and /api/v1 REST contract used by conventional applications. It complements—not replaces—SignalEDI's REST API, OpenAPI specification, webhooks, SDKs, and documentation.
The package is an uplift of SignalEDI's existing MCP adapter. Version 0.5 adds public developer discovery, resource templates, code examples, governed connection control-plane tools, strict tool-input validation, and explicit capability profiles while retaining the existing parser, transaction, partner-kit, and QuickBooks adapters.
Package |
|
MCP Registry |
|
Transport | stdio |
Runtime | Node 22+ |
Runtime dependency |
|
Default access | Always keyless |
Capability profiles
Set SIGNALEDI_MCP_PROFILE to one of these profiles. Tool discovery and direct tool calls are both restricted to the active profile.
Profile | Authentication | Surface |
| None | Public documentation resources and local synthetic helpers only; supplied document content and credentials are never uploaded. The OpenAPI resource performs a content-free public GET. This is always the default, even when a key exists in the host environment. |
| Separately provisioned non-production key plus explicit base URL | Authenticated parse/validate, generic partner-kit discovery, tenant-data reads, and guarded mutations for a separately provisioned sandbox. Canonical production SignalEDI hosts are refused. |
| Production-authorized platform key, exact | Allowlisted transaction/QBO-status/kit/connection reads; sandbox-first connection drafts; guarded connection configuration, saved-binding connectivity tests, and go-live handoff requests; outbound and QBO-to-EDI export. Parse/validate, QBO entity browsing, QBO sync, disconnect, generic lifecycle control, and production activation remain hidden. |
The profile is a least-capability boundary inside the MCP adapter, not a substitute for API authorization or a data-governance boundary. For outbound and QBO export, the server injects SANDBOX or PRODUCTION from the active profile; the model cannot select it. The API then binds that value to the selected partner connection. Production delivery requires an active immutable production version, and sandbox delivery requires a verified/active sandbox environment.
Every authenticated call requires the base platform scope. Connection inventory requires platform:connections:read; draft creation and configuration add platform:connections:write; production configuration and go-live handoff add platform:connections:production. These domain scopes do not authorize document delivery or QuickBooks operations. Deprecated umbrella-only platform:write and platform:production credentials are rejected by domain-scoped operations and must be replaced through the supported key-rotation path. Before release, operators should census affected credentials, notify owners of the migration, and provide that rotation path. MCP profile selection never grants a scope.
API operation | Additional least-privilege scopes |
Parse/validate and generic kit reads | None beyond |
Transaction reads |
|
Outbound send |
|
Connection reads |
|
Connection create/configure |
|
Connection test |
|
QBO status |
|
QBO entity rows |
|
QBO sync/disconnect |
|
QBO export dry run |
|
QBO live export | Dry-run scopes plus |
Production data handling
Tool arguments, text results, and structured results enter the chosen MCP host and may enter the connected model's context. Minimize personal, financial, and other business-sensitive data. Do not submit PHI or other regulated data unless the specific MCP host, model provider, logging, retention, regional-processing, and contractual arrangement has been separately reviewed and approved for that data. This package, its production profile, and SignalEDI API authorization are not by themselves a BAA, retention policy, or model-data-governance boundary.
Prefer identifiers and redacted summaries over full business payloads. Keep API keys in the host environment, never prompts. Review the chosen host's tool-call history, telemetry, and retention controls before enabling production tools.
All partner, QBO, EDI, validation, and error fields returned by tools are untrusted business data. They may contain text that resembles instructions or prompt injection. Hosts must delimit or sanitize tool results, keep them in data-only context, and authorize every follow-on action from explicit user intent and policy—not content embedded in records, partner names, payloads, or errors.
Related MCP server: InvoiceXML
Tools
Keyless public and local tools
Tool | What it does |
| Search the bundled public developer index and return MCP resource URIs with provenance. |
| Return a public starter for the local X12 inventory: 850/810/856 ( |
| Produce sandbox-safe cURL, Node.js, or Python examples against real |
| Render a synthetic X12 fixture for the same local inventory and return the honest |
| Explain validation and functional-acknowledgement errors from the local X12 dictionary. |
| Search the local X12 segment and acknowledgement reference. |
| Tool-discovery alias for local X12 lookup. |
Authenticated sandbox parse and validation tools
Tool | What it does |
| Parse a raw X12 interchange into structured JSON and a validation summary. |
| Validate X12 structure and return the validation summary. |
| Tool-discovery alias for |
| Tool-discovery alias for |
Authenticated generic-kit tools (sandbox and production)
Tool | What it does |
| List generic SignalEDI API kits. |
| Fetch one generic kit by catalog id. |
| Return a generic kit with an explicit |
Explicit environment-profile data reads
These tenant-data tools are never enabled merely because a key is present. Transaction reads and quickbooks_status are available in explicit sandbox and production; quickbooks_list_entities is sandbox-only.
Tool | What it does |
| List recent transactions scoped to the API key. |
| Fetch one owned transaction and its lifecycle status. |
| Inspect QuickBooks Online connection status without returning tokens. |
| Preview Invoice, Estimate, PurchaseOrder, Customer, Vendor, or Item rows for mapping (sandbox-only). |
Governed connection control plane (sandbox and production)
Connection tools operate on the public /api/v1/connections contract. MCP applies a second response allowlist over the API's sanitized representation: it may return opaque gateway/evidence references and configured-status booleans, but never stored credentials, secret references, raw transport configuration, private keys, certificates, or tokens.
Tool | What it does |
| Cursor-page tenant-scoped AS2/SFTP and legitimate legacy API connection summaries with optional partner/lifecycle filters. |
| Inspect safe environment, gateway, approval, test-coverage, readiness, and next-action state for one AS2/SFTP or legacy API connection. |
| Create or recover an idempotent sandbox-first |
| Bind an existing gateway reference and constrained X12 ISA/GS identifiers to an AS2/SFTP |
| Test the exact saved connection in the environment injected from the active profile. The operation causes partner-network egress, records sanitized evidence, requires host-enforced review plus an idempotency key, and never accepts endpoints or credentials or activates production. |
| Ask the API to move a server-proven |
There is deliberately no generic lifecycle-transition tool. test_connection can create authoritative connectivity evidence for the exact saved binding; intermediate testing/certification stages otherwise come from evidence or onboarding-project state, not model claims. There are no production activation, rollback, or isolation tools.
Explicit write-profile tools
Tool | What it does |
| Submit an outbound EDI document in the active sandbox/production environment. |
| Push a bounded transaction selection into QBO (sandbox-only); buyer and supplier directions are explicit, and |
| Preview or export QBO invoices/purchase orders as EDI in the active sandbox/production environment. Dry-run results are payload-redacted by default; full payloads require |
| Revoke and remove the workspace QBO connection (sandbox-only). |
Every tool publishes an input and output schema. The server validates inputs itself, rejects unknown fields, and returns both readable text and structuredContent with namespaced contract metadata.
Mutation safety
Write tools are absent from docs. Every live mutation requires confirm:true and a caller-generated idempotencyKey of 8–128 printable ASCII characters without leading/trailing whitespace. Outbound sends, QBO sync/export/disconnect, and connection create/configure/test/go-live requests enforce durable API-side replay protection and are annotated idempotent. QBO disconnect stays sandbox-only and reports a pending Intuit revocation instead of claiming completion. confirm:true is an assertion from the calling workflow; the MCP server cannot independently prove that a human approved it, so the host must present the action for review.
The MCP client never automatically retries mutations or parse/validate POSTs. Parse/validate upload synthetic or approved test data and can record sandbox usage, so their annotations remain non-read-only and non-idempotent. Read-only GETs retain bounded transient retry behavior.
Custom base URLs are rejected unless SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL=1 is set after the destination is verified. URLs containing credentials, paths, queries, or fragments are rejected. HTTP is allowed only for localhost and still requires the custom-host opt-in.
The adapter caps raw EDI inputs at 65,536 UTF-8 bytes, serialized JSON request bodies at 1 MiB, and API responses at 4 MiB. The input schemas publish character/collection bounds; byte limits are rechecked immediately before network use, and streamed responses are cancelled when they cross the cap.
Resources and prompts
Stable guidance is exposed as resources rather than action tools:
signaledi://quickstartsignaledi://openapisignaledi://developer-workflowssignaledi://x12-referencesignaledi://documents/{transactionSet}/schema
The document schema is also advertised as a resource template. Prompts include scaffold-integration, onboard-partner, and debug-rejection; scaffold and onboarding prompts default to synthetic data and avoid writes until an isolated sandbox is confirmed.
Quick start
Run the public docs profile:
npx -y @signaledi/mcp-server@0.5.0Configure the authenticated sandbox profile only after a non-production base and key have been provisioned. Claude Code project config (.mcp.json) expands ${NAME} from the host environment:
{
"mcpServers": {
"signaledi": {
"command": "npx",
"args": ["-y", "@signaledi/mcp-server@0.5.0"],
"env": {
"SIGNALEDI_MCP_PROFILE": "sandbox",
"SIGNALEDI_API_KEY": "${SIGNALEDI_SANDBOX_API_KEY}",
"SIGNALEDI_BASE_URL": "${SIGNALEDI_SANDBOX_BASE_URL}",
"SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL": "1"
}
}
}
}On native Windows, Claude Code must launch the npm shim through cmd:
{
"mcpServers": {
"signaledi": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@signaledi/mcp-server@0.5.0"],
"env": {
"SIGNALEDI_MCP_PROFILE": "sandbox",
"SIGNALEDI_API_KEY": "${SIGNALEDI_SANDBOX_API_KEY}",
"SIGNALEDI_BASE_URL": "${SIGNALEDI_SANDBOX_BASE_URL}",
"SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL": "1"
}
}
}
}Cursor uses .cursor/mcp.json, mcpServers, and ${env:NAME} references:
{
"mcpServers": {
"signaledi": {
"command": "npx",
"args": ["-y", "@signaledi/mcp-server@0.5.0"],
"env": {
"SIGNALEDI_MCP_PROFILE": "sandbox",
"SIGNALEDI_API_KEY": "${env:SIGNALEDI_SANDBOX_API_KEY}",
"SIGNALEDI_BASE_URL": "${env:SIGNALEDI_SANDBOX_BASE_URL}",
"SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL": "1"
}
}
}
}Claude Code plugin
This public repository is also a Claude Code / Cowork plugin for the community plugin directory. The plugin launches the same npm package over stdio — there is no parallel MCP implementation and SignalEDI does not expose a hosted remote MCP URL, so skip the remote OAuth connector directory.
Plugin manifest |
|
MCP config |
|
Skill |
|
Validate locally |
|
Submit (Console) | |
Submit (claude.ai Team/Enterprise) |
Docs: Submitting your plugin. Official claude-plugins-official marketplace is curated; community submit still requires a public GitHub repo and claude plugin validate. One-click install needs @signaledi/mcp-server@0.5.0 on npm.
Claude Desktop (MCPB)
Package the same stdio server as a Claude Desktop Extension (.mcpb). Source: mcpb/manifest.json + scripts/build-mcpb.mjs. See mcpb/README.md for full build and submit notes.
npm ci
npm run build:mcpb
# → dist/signaledi-mcp-server-0.5.0.mcpbInstall by double-clicking the .mcpb, dragging it into Claude Desktop, or Settings → Extensions → Advanced → Install Extension…. Extension settings map to the same env vars as server.json (SIGNALEDI_API_KEY, SIGNALEDI_BASE_URL, SIGNALEDI_MCP_PROFILE, etc.). Author/publisher: SignalEDI · Support@signaledi.com · https://signaledi.com.
Directory submit (manual only): do not submit from this agent/CI. When ready, follow Anthropic’s desktop extension submission form after building/testing the artifact. Tooling: @anthropic-ai/mcpb (mcpb pack / mcpb validate). Spec: Build a desktop extension with MCPB.
Google Antigravity
Manual Antigravity / Gemini-style plugin folder at antigravity-plugin/ (wires mcp_config.json → npx -y @signaledi/mcp-server@0.5.0). MCP Store listing is not self-serve; install by copying the folder:
Scope | Path |
Global |
|
Workspace |
|
See antigravity-plugin/README.md. Brand: SignalEDI only.
Cursor Marketplace
This public repository is packaged as a Cursor Plugin for the official Marketplace. The plugin launches the same npm package over stdio — there is no parallel MCP implementation.
Plugin manifest |
|
MCP config |
|
Logo |
|
Skill |
|
Submit | cursor.com/marketplace/publish → repo |
Install (after listing): open Customize → Marketplace, search for SignalEDI, and install.
Configure: set plugin variables under Plugins → Configure (no secrets in the repo or prompts):
Variable | Typical value |
|
|
| Least-privilege workspace key (ignored by |
| Verified non-production origin, or exactly |
|
|
|
|
Plugin mcp.json uses ${VAR} placeholders that match those dashboard variables (not the manual ${env:NAME} syntax used in project .cursor/mcp.json). Unset placeholders stay fail-closed on the keyless docs profile. Marketplace one-click install requires @signaledi/mcp-server@0.5.0 (or newer matching pin) on npm; until that publish lands, local/manual npx against a published version still works for verification.
Publishing is subject to the Cursor Marketplace Publisher Terms. Marketplace plugins must be open source and pass manual review; see marketplace security.
Privacy Policy
SignalEDI’s product privacy policy is published at https://signaledi.com/privacy. The MCP adapter runs locally over stdio; authenticated calls send tool inputs to the SignalEDI API host you configure. Tool arguments, text results, and structured results enter the MCP host and may enter model context—see Production data handling above. Contact: Support@signaledi.com.
VS Code uses .vscode/mcp.json, a top-level servers object, and a password input for secrets:
{
"inputs": [
{
"type": "promptString",
"id": "signaledi-api-key",
"description": "SignalEDI non-production sandbox API key",
"password": true
},
{
"type": "promptString",
"id": "signaledi-api-base",
"description": "Verified non-production SignalEDI API base URL"
}
],
"servers": {
"signaledi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@signaledi/mcp-server@0.5.0"],
"env": {
"SIGNALEDI_MCP_PROFILE": "sandbox",
"SIGNALEDI_API_KEY": "${input:signaledi-api-key}",
"SIGNALEDI_BASE_URL": "${input:signaledi-api-base}",
"SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL": "1"
}
}
}
}For a provisioned local sandbox, add the following values to the chosen client's env object, using that client's environment-reference syntax for the key:
{
"SIGNALEDI_MCP_PROFILE": "sandbox",
"SIGNALEDI_API_KEY": "<host environment reference to SIGNALEDI_SANDBOX_API_KEY>",
"SIGNALEDI_BASE_URL": "http://localhost:3100",
"SIGNALEDI_MCP_ALLOW_CUSTOM_BASE_URL": "1"
}Production is an explicit, fail-closed opt-in. Use only the canonical origin and keep the key in the MCP host environment:
{
"SIGNALEDI_MCP_PROFILE": "production",
"SIGNALEDI_API_KEY": "<host environment reference to SIGNALEDI_PRODUCTION_API_KEY>",
"SIGNALEDI_BASE_URL": "https://signaledi.com",
"SIGNALEDI_MCP_ALLOW_PRODUCTION": "1"
}The production profile does not accept custom hosts or a missing/implicit base. Removing any one of the profile, key, canonical base, or opt-in prevents startup.
Never paste real keys or secrets into prompts. MCP server environment variables are resolved by the host process, not by the model.
Configuration
Environment variable | Default | Purpose |
|
| Capability boundary: |
| — | Least-privilege workspace key; ignored in |
| Public production base for the content-free docs OpenAPI GET only | Sandbox requires an explicit verified non-production origin; production requires exactly |
| — | Set to |
| — | Set to |
| enabled | Set to |
The server writes JSON-RPC only to stdout and logs only to stderr.
Deliberately deferred surfaces
The MCP does not fabricate hosted capabilities that are not yet backed by stable, tenant-isolated APIs:
suggest_mappingandvalidate_mappingwait for the structured mapping-validation service and partner-guide provenance contract.create_sandbox_project,create_test_partner,submit_test_document, andget_test_resultswait for stable tenant-isolated lifecycle/test routes.generate_webhook_fixtureandverify_webhook_signaturewait for one canonical runtime signing contract; the current primary delivery/replay path and remediation path sign differently.Credential rotation, raw gateway configuration, mapping deployment, arbitrary partner edits, manual evidence/lifecycle claims, production activation/rollback/isolation, QBO sync/disconnect, and document retransmission are not exposed in production. The production profile is limited to the allowlisted reads and server-gated draft/configuration/connectivity-test/go-live-request/outbound/QBO-export operations described above.
Local development
node test.mjs
npm run test:stdio
npm startUnit tests use synthetic data and mock HTTP. The stdio integration tests exercise docs, sandbox, and production discovery without live API calls. See RELEASE_NOTES_0.5.0.md for release gates.
Architecture and repository authority
MCP client
<-> @signaledi/mcp-server over stdio
|- public documentation resources and local synthetic helpers
`- profile-gated calls to the conventional SignalEDI /api/v1 REST APIThe standalone GitHub repository SignalEDI/mcp-server is the canonical source and sole automated npm/MCP Registry publish authority. The private SignalEDI/platform repository may retain a synchronized validation snapshot for its hosted API/backend contracts; see MIRROR.md. All examples are synthetic and must remain free of customer, health, financial, and credential data.
Available Tools
7 toolsexplain_edi_errorExplain Edi ErrorARead-onlyIdempotent
Explain an EDI validation or functional-ack error using the local X12 dictionary (meaning, typical cause, fix, lookup_x12 cross-refs). Never calls the network; works in the docs profile. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Ack or validation code (e.g. R, 4, 7). | |
| segment | No | Segment id near the error (e.g. SE, PO1). | |
| rawError | No | Optional raw error text from validate_edi or a 997/999. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fix | Yes | |
| meaning | Yes | |
| rawError | No | |
| lookup_x12 | Yes | |
| typicalCause | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it is a local operation, never calls the network, and works in the docs profile. This goes beyond the annotations and helps an agent understand execution constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core purpose, then adds the key constraints (local, no network, docs profile). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are already documented. The description covers the tool's scope, constraints, and relationship to the X12 dictionary. It could mention what happens when no match is found or how the cross-refs are presented, but given the output schema and annotations, the description is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description does not add additional meaning beyond the schema, but it does mention 'lookup_x12 cross-refs' which hints at how the code parameter relates to the dictionary. Baseline 3 is appropriate since the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Explain') and resource ('EDI validation or functional-ack error') and explicitly distinguishes itself from siblings by mentioning 'lookup_x12 cross-refs' and 'local X12 dictionary'. It clearly identifies what the tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: for EDI validation or functional-ack errors, using the local X12 dictionary. It also states what it does not do ('Never calls the network') and where it works ('docs profile'). However, it does not explicitly name alternative tools or conditions for when not to use it, though the sibling list and cross-ref mention imply alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_integration_exampleGenerate Integration ExampleARead-onlyIdempotent
Generate a sandbox-safe cURL, Node.js, or Python example for the current SignalEDI REST contract. Uses environment-variable placeholders and synthetic values, sets outbound environment to SANDBOX, refuses production hosts, and never embeds credentials. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| language | Yes | ||
| operation | Yes | ||
| documentType | No | Fixture type. Outbound examples support 850, 810, and 856; 837 is parse/validate only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | Yes | |
| path | Yes | |
| notes | Yes | |
| method | Yes | |
| language | Yes | |
| operation | Yes | |
| sourceUri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses specific behaviors: uses environment-variable placeholders, synthetic values, sets outbound environment to SANDBOX, refuses production hosts, and never embeds credentials. This adds substantial safety-relevant context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main purpose and followed by safety guarantees. Every clause earns its place with no filler, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 enums and a oneOf schema, the description covers the essential context (sandbox safety, read-only local behavior, output format). The output schema exists and the oneOf constraints are in the input schema, so the description does not need to reiterate them. Minor gap: it does not explicitly state that no network call is made, though 'local read-only' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (documentType has a description), so the description must partially compensate. It does clarify the language parameter ('cURL, Node.js, or Python') and hints at operation via 'outbound environment', but it does not explicitly explain the operation or documentType enums or the oneOf constraint. It adds some value but leaves gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate'), a concrete resource ('cURL, Node.js, or Python example for the current SignalEDI REST contract'), and scopes it as sandbox-safe. It is clearly distinct from sibling generate_test_document, which likely produces test EDI payloads rather than client code examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context (sandbox-safe, current REST contract) and implies use for generating client examples, but it does not explicitly name when to prefer this tool over alternatives like generate_test_document or search_docs, nor does it state exclusions. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_test_documentGenerate Test DocumentARead-onlyIdempotent
Render a synthetic X12 sample for the local inventory (850/810/856 baseline, 837 Professional partial). Returns an honest capability label. controlNumber and the transaction's primary date apply to every fixture; poNumber applies only to 850 and 810. Refuses EDIFACT, HL7, and unknown sets. Local only; works in the docs profile. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Local fixture codes: 850, 810, 856, 837. 837 means Professional 005010X222A1 only. | |
| overrides | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tool | No | |
| type | No | |
| error | No | |
| content | No | |
| message | No | |
| requestId | No | |
| capability | No | |
| validationErrors | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description reinforces 'Local read-only operation.' It adds valuable behavioral context beyond annotations: refusal behavior for non-supported standards, the 'honest capability label' return, and parameter applicability rules. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (three sentences) and front-loaded with the core purpose. Each sentence earns its place: purpose, capability label, parameter scoping, and operational constraints. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, 1 required, nested overrides) and the description covers the essential behavior: what it generates, which types are supported, how parameters apply, what it refuses, and that it is local and read-only. The presence of an output schema covers return structure, so the description is complete for an agent to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description compensates by explaining that controlNumber and primary date apply to every fixture, while poNumber applies only to 850 and 810. This adds meaning beyond the raw schema, which only gives per-parameter descriptions for type and date. The description also clarifies the 837 meaning as Professional 005010X222A1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders synthetic X12 samples for specific transaction types (850/810/856 baseline, 837 Professional partial), with a specific verb ('render') and resource ('synthetic X12 sample'). It also names the capability label return, distinguishing it from sibling tools like search_docs or lookup_x12, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it is local-only, works in the docs profile, and explicitly refuses EDIFACT, HL7, and unknown sets. It also clarifies which parameters apply to which fixture types. While it doesn't explicitly contrast with alternatives, the tool's unique role as the only generator among siblings makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_schemaGet Document SchemaARead-onlyIdempotent
Get a public X12 starter schema for the local inventory (850/810/856 baseline, 837 Professional partial). Returns an honest capability label and is explicitly not a trading-partner implementation guide. Refuses EDIFACT, HL7, and unknown sets. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| transactionSet | Yes | Local starter codes: 850, 810, 856, 837. 837 means Professional 005010X222A1 only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| tool | No | |
| error | No | |
| fixture | No | |
| message | No | |
| variant | No | |
| envelope | No | |
| authority | No | |
| direction | No | |
| keyFields | No | |
| requestId | No | |
| sourceUri | No | |
| capability | No | |
| limitation | No | |
| commonSegments | No | |
| transactionSet | No | |
| requiredSegments | No | |
| validationErrors | No | |
| implementationGuide | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior, so the bar is lower. The description adds useful behavioral context around unsupported formats, the 'honest capability label' return behavior, and the local-inventory scope. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core operation in the first sentence. 'Local read-only operation' is somewhat redundant with annotations, and 'honest capability label' is slightly vague, but there is little wasted space overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only, idempotent tool with an output schema and strong annotations, the description covers scope, unsupported inputs, and its boundary versus an implementation guide. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is already fully documented in the schema, including allowed values and the meaning of 837. The description mostly restates those values, only adding the 'partial' nuance, so it hovers at the baseline expected when schema description coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact operation and resource: 'Get a public X12 starter schema for the local inventory' and scopes it to 850/810/856 baseline plus 837 Professional partial. It also distinguishes itself from a trading-partner implementation guide, which clarifies what this tool is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear boundaries: it is explicitly not a trading-partner implementation guide and refuses EDIFACT, HL7, and unknown sets. It does not explicitly name sibling alternatives like lookup_x12, but the context is strong enough for an agent to understand when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_element_definitionLookup Element DefinitionARead-onlyIdempotent
Alias for lookup_x12 — search segment maps and ack codes (850/810/856/837 dictionaries). Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Segment id, element keyword, or ack code. | |
| element | No | Alias for query when prompting by element name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds 'Local read-only operation,' which is consistent and adds minor context (local implies no remote calls). It also specifies the covered dictionaries, but does not disclose additional behaviors like error handling or response format, which are partly covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that leads with the alias and then the core purpose. Every word adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and comprehensive annotations, the description is mostly complete. It specifies the exact dictionaries and notes it is local and read-only, which is sufficient for an agent to call it correctly. It does not mention that either 'query' or 'element' is required, but that is already encoded in the schema via anyOf.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'query' and 'element' parameters having detailed descriptions in the schema. The tool description adds no extra parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an alias for lookup_x12 and specifies its function: searching segment maps and ack codes within 850/810/856/837 dictionaries. It uses a specific verb ('search') and resource ('segment maps and ack codes'), and the mention of being an alias distinguishes it from other tools like search_docs or explain_edi_error.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it is an alias for lookup_x12 but provides no guidance on when to use this tool versus alternatives. It does not mention conditions for choosing it over search_docs, get_document_schema, or other siblings, nor does it offer exclusions or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_x12Lookup X12ARead-onlyIdempotent
Search the local X12 dictionary by segment id, ack code, or free text (segment names and purposes). Local only; works in the docs profile. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Segment id, ack code, or keyword. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about execution scope ('local only') and environment ('works in the docs profile'), and notes it's a read-only operation. This goes beyond what annotations provide, so it earns a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is crisp and informative. The second and third sentences overlap ('local only' vs 'local read-only operation'), creating mild redundancy. The description could be tightened without losing meaning, so it's acceptable but not exemplary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a single-parameter read-only lookup tool with an output schema. It covers query types, scope, and environment; the output schema handles return value details. It doesn't address differentiating from siblings, but that's not essential for calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema's 100% description coverage sets a baseline of 3. The description adds value by specifying that the query can be free text for segment names and purposes, which expands on the schema's 'keyword' and clarifies that searches are not limited to exact codes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches a local X12 dictionary with specific query types (segment id, ack code, free text). It distinguishes its scope with 'local only' and 'works in the docs profile,' but it doesn't explicitly name sibling tools to prevent confusion, so it's clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by describing the search and local scope, but it doesn't provide explicit guidance on when to use this tool instead of siblings like lookup_element_definition or search_docs. It mentions 'local only' and 'docs profile' as context for availability, but there is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch DocsARead-onlyIdempotent
Search the bundled public SignalEDI developer index. Returns authoritative MCP resource URIs and short snippets; it does not search customer data or private partner guides. Local read-only operation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches (default 5). | |
| query | Yes | Developer question or keywords. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| scope | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds useful behavior beyond those: it is a local read-only operation, scoped to the bundled public index, and returns authoritative MCP resource URIs and snippets while explicitly not searching customer data or private guides. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The first sentence names the action and scope; the second states the return type and exclusions. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool with a full input schema and output schema, the description covers the scope, return content, and exclusions. An agent has enough context to call the tool correctly without needing additional explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema description coverage is 100%, with clear descriptions for both query and limit, including default and bounds. The description does not add much parameter-specific semantics beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description names the specific action ('Search'), the resource ('bundled public SignalEDI developer index'), and the output ('authoritative MCP resource URIs and short snippets'). It also explicitly excludes customer data and private partner guides, which helps distinguish it from broad retrieval or sibling lookups like lookup_x12 and lookup_element_definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear scope and states what it does not search (customer data, private guides), which is a useful boundary. However, it does not explicitly name or route to any sibling alternative for structured lookups (e.g., lookup_x12 or get_document_schema), so when-to-use guidance remains mostly implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
21 tool updates
v0.4.1- Changed
explain_edi_error1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "fix": { + "type": "string" + }, + "lookup_x12": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "meaning": { + "type": "string" + }, + "rawError": { + "type": "string" + }, + "typicalCause": { + "type": "string" + } + }, + "required": [ + "meaning", + "typicalCause", + "fix", + "lookup_x12" + ], + "type": "object" +}
- Added
generate_integration_example - Changed
generate_test_document14 fields changed- added
Input schema / properties / overrides / properties / controlNumber / maxLengthAdded value: +9 - added
Input schema / properties / overrides / properties / controlNumber / minLengthAdded value: +9 - added
Input schema / properties / overrides / properties / controlNumber / patternAdded value: +"^\\d{9}$" - changed
Input schema / properties / overrides / properties / date / descriptionPrevious value: -"YYYYMMDD"New value: +"YYYYMMDD primary transaction date: PO date (850), invoice date (810), shipment date (856), or claim creation/service date (837 Professional)." - added
Input schema / properties / overrides / properties / date / patternAdded value: +"^\\d{8}$" - added
Input schema / properties / overrides / properties / poNumber / descriptionAdded value: +"Purchase-order reference for 850 and 810 only." - added
Input schema / properties / overrides / properties / poNumber / maxLengthAdded value: +40 - added
Input schema / properties / overrides / properties / poNumber / minLengthAdded value: +1 - changed
Input schema / properties / type / descriptionPrevious value: -"Transaction set to generate."New value: +"Local fixture codes: 850, 810, 856, 837. 837 means Professional 005010X222A1 only." - removed
Input schema / properties / type / enumRemoved value: -[ - "850", - "810", - "856", - "837" -] - added
Input schema / properties / type / maxLengthAdded value: +16 - added
Input schema / properties / type / minLengthAdded value: +2 - added
Input schema / properties / type / patternAdded value: +"^[A-Za-z0-9][A-Za-z0-9/_-]{0,15}$" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "anyOf": [ + { + "required": [ + "type", + "capability", + "content" + ] + }, + { + "required": [ + "error", + "message" + ] + } + ], + "properties": { + "capability": { + "enum": [ + "baseline", + "partial" + ], + "type": "string" + }, + "content": { + "type": "string" + }, + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "requestId": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "type": { + "enum": [ + "850", + "810", + "856", + "837" + ], + "type": "string" + }, + "validationErrors": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
get_document_schema - Removed
get_partner_kit - Removed
get_transaction - Removed
list_partner_kits - Removed
list_transactions - Changed
lookup_element_definition8 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "query" + ], + "type": "object" + }, + { + "required": [ + "element" + ], + "type": "object" + } +] - added
Input schema / properties / element / maxLengthAdded value: +200 - added
Input schema / properties / element / minLengthAdded value: +1 - added
Input schema / properties / element / patternAdded value: +"\\S" - added
Input schema / properties / query / maxLengthAdded value: +200 - added
Input schema / properties / query / minLengthAdded value: +1 - added
Input schema / properties / query / patternAdded value: +"\\S" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "matches": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query", + "matches" + ], + "type": "object" +}
- Changed
lookup_x121 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "matches": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + } + }, + "required": [ + "query", + "matches" + ], + "type": "object" +}
- Removed
parse_edi - Removed
parse_segments - Removed
quickbooks_disconnect - Removed
quickbooks_export_to_edi - Removed
quickbooks_list_entities - Removed
quickbooks_status - Removed
quickbooks_sync_to_qbo - Added
search_docs - Removed
send_outbound_document - Removed
validate_edi - Removed
validate_x12_structure
18 tool updates
v0.4.0- First observed
explain_edi_error - First observed
generate_test_document - First observed
get_partner_kit - First observed
get_transaction - First observed
list_partner_kits - First observed
list_transactions - First observed
lookup_element_definition - First observed
lookup_x12 - First observed
parse_edi - First observed
parse_segments - First observed
quickbooks_disconnect - First observed
quickbooks_export_to_edi - First observed
quickbooks_list_entities - First observed
quickbooks_status - First observed
quickbooks_sync_to_qbo - First observed
send_outbound_document - First observed
validate_edi - First observed
validate_x12_structure
TDQS
Scored across 7 tools
lookup_x12 and lookup_element_definition are explicitly the same operation under different names, creating direct overlap. search_docs and lookup_x12 also share a search-like purpose, though descriptions differentiate them. Other tools are clearly distinct.
All tool names follow a consistent snake_case verb_noun pattern (search_, get_, lookup_, generate_, explain_). No mixed conventions or irregular prefixes exist.
With 7 tools, the server is well within the ideal 3-15 range for its EDI reference scope. The one redundant alias tool is a minor blemish but does not make the set bloated or thin.
The tool surface covers the main workflows for an EDI documentation/sandbox server: searching docs, retrieving schemas, looking up X12 definitions, generating examples, explaining errors, and producing test documents. Minor gaps exist (e.g., no explicit supported-transaction-set listing), but no critical dead ends.
Maintenance
Related MCP Connectors
Connect QuickBooks Online to AI agents with secure read or write access across multiple companies.
Validate, extract, repair and generate French Factur-X / EN16931 invoices via AgentForge API
Validate, generate & convert EU e-invoices (UBL, CII, XRechnung, Factur-X) — EN 16931 pre-validated.
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to query and manage QuickBooks Online data through natural language, including customers, invoices, bills, vendors, accounts, and financial reports.7MIT

InvoiceXMLofficial
AlicenseNot gradedqualityCmaintenanceInvoiceXML brings e-invoice compliance to your AI agent. Create, validate, convert, render, and extract structured invoices across UBL (Peppol BIS Billing 3.0, used worldwide), CII, Factur-X, ZUGFeRD, and XRechnung, all checked against the EN 16931 standard and official Schematron rules. Ask your assistant to generate a compliant invoice, validate one for errors, or convert between formats, with n5MIT- FlicenseNot gradedqualityDmaintenanceIntegrates QuickBooks with GenAI applications via the Model Context Protocol, enabling accounting and financial management tasks.1-
- AlicenseAqualityCmaintenanceLet AI agents read, validate and acknowledge EDI documents. Parses raw X12 and EDIFACT interchanges into structured JSON, validates envelope integrity, produces plain-language summaries, and generates 997 Functional Acknowledgments.4MIT