EAD Enterprise Suite MCP Server
Click on "Install 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., "@EAD Enterprise Suite MCP Serversend a signature request for contract 456 to client@example.com"
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.
EAD Enterprise Suite MCP Server
MCP server for EAD Enterprise Suite - signatures, evidence, notifications, dossiers via AI agents.
Quick start
npx -y @g-digital/mcp-ead-enterprise-suiteOr see ONBOARDING.md for a step-by-step setup guide (≤ 5 minutes).
Related MCP server: zyta-sign-mcp
Where to install
This MCP is published to every major MCP distribution channel by the g-digital MCP distribution pipeline. Pick whichever fits your stack:
Channel | Install command / URL |
npm |
|
Docker Hub |
|
MCP Official Registry | Auto-discovered as |
n8n community node | Install |
Smithery |
|
Every channel ships the same MCP server contract; the tools and environment configuration below apply regardless of which install path you choose.
Need credentials? Visit: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Installation
Claude Desktop
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Claude Code (CLI)
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Cursor
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Windsurf
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Cline
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
VS Code
{
"servers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
JetBrains
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Zed
{
"mcpServers": {
"ead-enterprise-suite": {
"args": [
"-y",
"@g-digital/mcp-ead-enterprise-suite"
],
"command": "npx"
}
}
}Need credentials? See: https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/
Claude Desktop / Claude Code
Add to your ~/.claude.json or claude_desktop_config.json:
{
"mcpServers": {
"ead-enterprise-suite": {
"command": "npx",
"args": ["-y", "@g-digital/mcp-ead-enterprise-suite"],
"env": {
"MCP_AUTH_EMAIL": "your-email@example.com",
"MCP_AUTH_PASSWORD": "your-password"
}
}
}
}Docker
docker run --rm -i \
-e MCP_AUTH_EMAIL=your-email@example.com \
-e MCP_AUTH_PASSWORD=your-password \
gdigital/ead-enterprise-suite:latestEnvironment Variables
Name | Required | Secret | Description |
| No | No | Set to "true" to allow plain http:// fileUrl downloads in evidence_create (default https-only). Private/internal addresses are rejected regardless (resolution-time check; see the documented DNS TOCTOU limitation in the hosted-deployment runbook). |
| No | No | Escape hatch for MCP_HTTP_PUBLIC=true WITHOUT inbound-token introspection: set to "true" ONLY when an upstream gateway already verifies Bearer tokens. The server logs a prominent warning and forwards tokens upstream unverified. |
| No | No | Comma-separated allowed Host headers. Empty = Host validation disabled (default). When set, requests with a Host outside the list are rejected. |
| No | No | Comma-separated allowed browser Origins (DNS-rebinding defense). Empty = reject any request carrying an Origin header; non-browser clients (CLI/SDK) send no Origin and are always allowed. Use '*' to allow all. |
| No | No | Overrides the default upstream API host for every tool |
| No | No | Your EAD Enterprise Suite account email. Configure exactly one flow; do not combine it with the others. |
| No | Yes | Your EAD Enterprise Suite account password. (See https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/ for credential acquisition.) |
| No | Yes | Long-lived EAD Enterprise Suite user key, exchanged automatically for a short-lived session token. Use it for headless or automated access instead of an account password. Configure exactly one flow; do not combine it with the others. (See https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/ for credential acquisition.) |
| No | No | Interface the HTTP transport binds to. Default 127.0.0.1 (localhost only). Set 0.0.0.0 to expose on all interfaces (containers do this automatically). |
| No | No | Maximum accepted POST /mcp request-body size in bytes (default 16777216 = 16 MiB — sized so base64 file uploads within the documented tool limits fit). Oversized requests get a 413 JSON-RPC error before/while reading — closes a memory-exhaustion DoS vector in public deployments. Note: base64 file sources are capped by this limit BEFORE MCP_FILE_MAX_BYTES applies. |
| No | No | Set to "true" for public/multi-tenant deployments. Activates Host validation and refuses to start unless (1) MCP_ALLOWED_ORIGINS or MCP_ALLOWED_HOSTS is set AND (2) inbound Bearer introspection is configured (MCP_SVC_INTROSPECT_URL + MCP_SVC_CLIENT_ID/SECRET) or MCP_ALLOW_UNVERIFIED_BEARER=true is set explicitly (fail-closed). |
| No | No | Client ID this server presents to the introspection endpoint above (its resource-server credentials). Only needed alongside MCP_SVC_INTROSPECT_URL; it does not authenticate you to EAD Enterprise Suite. |
| No | Yes | Client secret this server presents to the introspection endpoint above (its resource-server credentials). Only needed alongside MCP_SVC_INTROSPECT_URL; it does not authenticate you to EAD Enterprise Suite. (See https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/ for credential acquisition.) |
| No | No | RFC 7662 token introspection URL for inbound Bearer verification in HTTP mode. Opt-in, and required when MCP_HTTP_PUBLIC=true. Leave empty for stdio (local) use. |
| No | No | HTTP port when running in hosted (HTTP) mode; ignored in stdio mode |
Variable | Required | Description |
| One of the two flows | Your account email |
| One of the two flows | Your account password |
| One of the two flows | Long-lived user key (exchanged for a session token) |
| Optional | Pre-seeded JWT (skips interactive login) |
| Optional | Set to |
| Optional | Override upstream API base URL |
Bundled Skills
This package ships Claude Code slash-commands under .claude/commands/. After install, invoke them from Claude Code:
/getting-started— step-by-step workflow guide/signature-lifecycle— step-by-step workflow guide/notification-lifecycle— step-by-step workflow guide/evidence-lifecycle— step-by-step workflow guide/dossier-lifecycle— step-by-step workflow guide
See docs/agent-prompts.md for end-to-end prompt examples and the tool sequences they trigger.
Prefer to code against the REST API directly?
You don't have to go through this MCP server. This repo also ships a Claude Code skill — a standalone integration guide (authentication, call ordering, options, enums, gotchas) for programming directly against the REST API:
Skill:
.claude/skills/gocertius-suite-api/SKILL.md— open this repo in Claude Code and it is available directly.As a reference: docs/api-integration-skill.md.
It is independent of the MCP tools and the n8n node — pick whichever entry point fits your integration.
Available Tools
This server exposes 52 tools:
Tool | Description |
| Registers a NEW evidence record inside an evidence group. Requires: evidence_group_create → evidenceGroupId, case_file_create → caseFileId. Generate a UUID v4 for |
| Lists all evidence records in a specific evidence group. Requires: caseFileId and evidenceGroupId. Returns paginated list with IDs, titles, status, and timestamps. |
| Seals an evidence group and triggers qualified TSP timestamping. Requires: all INTERNAL evidence records in the group have already been uploaded to their uploadFileUrl and verified with evidence_get/evidence_list. Requires case_file_create → caseFileId and evidence_group_create → evidenceGroupId. Set evidencesCount to the number of evidences in the group. ASYNC: after calling, poll evidence_group_list until the group status changes to CLOSED before linking to a dossier or generating certificates. |
| Retrieves a specific evidence record. Requires: evidence_create → evidenceId, evidence_group_create → evidenceGroupId, case_file_create → caseFileId. Returns status (COMPLETED |
| Creates an evidence group inside a case file. Requires: case_file_create → caseFileId. Generate a UUID v4 for |
| Lists all evidence groups in a case file with their current status (OPEN, CLOSING, CLOSED). Use to find an existing group or check which groups are ready for sealing. Requires: caseFileId. |
| Creates a dossier to aggregate certified evidence groups into a single tamper-evident PDF. Requires: case_file_create → caseFileId. Evidence groups must be in CLOSED status before linking. Generate a UUID v4 string for |
| Updates the metadata of an existing dossier. Requires: dossier_create → dossierId, caseFileId. Only available while dossier is in DRAFT status. |
| Certifies a dossier, generating a tamper-evident PDF and locking all linked evidence. Requires: dossier_create → dossierId, dossier_evidence_link (evidence linked), case_file_create → caseFileId. ASYNC: transitions DRAFT → CERTIFYING → CERTIFIED. Poll dossier_list until dossierId status === CERTIFIED. |
| Lists all dossiers in a case file. Requires: caseFileId. Returns paginated list with IDs, names, status, and creation dates. Use to monitor certification progress — poll until status: CERTIFIED. |
| Retrieves full details of a specific dossier including status, linked evidence, and download URLs. Requires: caseFileId and dossierId. |
| Lists available dossier templates. No prerequisites. Returns template IDs and their translations per language. Use the returned id as dossierTemplateId in dossier_create. |
| Returns an HTML preview URL of a dossier before certification. Requires: caseFileId and dossierId. |
| Returns the download URL for the certified dossier PDF. Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId. |
| Returns the download URL for the full dossier package (PDF + evidence files). Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId. |
| Updates the visibility (public/private) of a certified dossier. Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId. |
| Deletes a dossier. Available in DRAFT status (to discard before certification) or in CERTIFIED status (to permanently remove the certified dossier). Irreversible. Requires: caseFileId and dossierId. |
| Creates AND certifies a dossier from a single sealed evidence group in one call (express path). Requires: evidence_seal (CLOSED), case_file_create → caseFileId, evidence_group_create → evidenceGroupId. Generate a UUID v4 string for |
| Links evidence items from a sealed group to a dossier. Requires: dossier_create → dossierId, evidence_seal (CLOSED), case_file_create → caseFileId. Pass the ids array of evidence UUIDs. Can be called multiple times for evidence from different case files. |
| Lists evidence items available to be linked to a dossier (CLOSED groups not yet linked). Requires: caseFileId and dossierId. |
| Lists all evidence items linked to a dossier. Requires: caseFileId and dossierId. |
| Retrieves details of a specific evidence item linked to a dossier. Requires: caseFileId, dossierId, evidenceId. |
| Removes an evidence item from a dossier. Only available while dossier is in DRAFT status. Requires: caseFileId, dossierId, evidenceId. |
| Performs the notification_document_add operation. Review the API documentation for full field details. |
| Creates a certified notification request. Requires: case_file_create → caseFileId. Generate a UUID v4 for |
| Sends the certified notification to all added receivers. Requires: notification_request_create → notificationRequestId, notification_receiver_add (at least one receiver), case_file_create → caseFileId. ASYNC: triggers delivery. Poll notification_request_status until status is SENT or beyond (PARTIALLY_READ, FULLY_READ) before generating certificates. |
| Checks the delivery status of a certified notification. Requires: notificationRequestId, caseFileId. Returns status (CREATING |
| Adds a recipient to a notification request. Requires: notification_request_create → notificationRequestId, case_file_create → caseFileId. The |
| Generates or retrieves a PDF certificate for a specific receiver proving delivery and/or reading/answer of the notification. Requires: notification_request_send, notification_receiver_add → receiverId, notificationRequestId, caseFileId. Generate a UUID v4 for |
| Creates a new case file — the top-level container for all related operations (evidence, notifications, signatures, dossiers). Call this first before any other operation. Generate a UUID v4 for |
| Lists all case files in your EAD Enterprise Suite account. Pass userId (from session_login or session_info) to scope results to your account. Returns paginated list with IDs, names, and status. |
| Retrieves details of a specific case file. Requires: caseFileId. Use to verify a case file exists before creating evidence groups, dossiers, or signature requests. |
| Authenticates with EAD Enterprise Suite to obtain a session JWT. Takes NO parameters — credentials are read from the server environment: MCP_AUTH_USER_KEY (a long-lived user key, exchanged automatically for a session token) or MCP_AUTH_EMAIL plus MCP_AUTH_PASSWORD. The MCP server manages authentication automatically; call this only if you hit 401 errors. |
| Retrieves information about the current authenticated session including userId, account, and token expiry. Works on both auth flows: on a user-key deployment (MCP_AUTH_USER_KEY, no email configured) it resolves identity via GET /profile; with MCP_AUTH_EMAIL it queries /session-info. If you only need the userId, prefer profile_get — it is the canonical source ( |
| Returns the authenticated user's own profile. Works on EVERY auth flow (user key or email/password) because it identifies the caller from the session token alone — no email needed. Its |
| Lists available use cases for the account. Use cases define the allowed signature workflows and document types. Returns useCaseId values needed for signature_request_create. |
| Creates a signing order group for a CONFIGURABLE signature request. Types: 'Document' (groups documents into signing rounds — use its id as groupId in signature_request_add_document), 'Signatory' (groups signatories into signing rounds — use its id as groupId in signature_participant_create), 'DocumentSignatory' (links a specific document to a signing round, requires documentId). IMPORTANT — avoid empty groups: when a CONFIGURABLE request is created, the API automatically pre-creates one Document group and one Signatory group both at index:1. Always use these pre-existing index:1 groups for your first document and first signatory (retrieve their IDs with signature_group_list immediately after creating the request). Only call signature_group_create for the ADDITIONAL groups (index:2, 3…). Add participants with linkToAllDocuments:true so DocumentSignatory groups are auto-generated at the correct index. Adding participants without linkToAllDocuments leaves them unlinked to documents and signature_coordinate_set will fail with 'Signatory not found'. |
| Lists all signing order groups of a CONFIGURABLE signature request. Returns id, type (Document/Signatory/DocumentSignatory), index, and documentId for each group. Call immediately after signature_request_create to retrieve the pre-created index:1 group IDs before adding documents or participants. |
| Creates a new signature request in DRAFT status. Requires: case_file_create → caseFileId. Generate a UUID v4 for |
| Retrieves full details of a signature request. Requires: signature_request_create → requestId, case_file_create → caseFileId. Returns status, documents, participants, deadline, and history. Use to check overall process state. |
| Cancels an active signature request. Requires: activate_signature_request (ACTIVE status), requestId, caseFileId. Transitions to CANCELLED. Cannot be undone. |
| Adds a document to a DRAFT signature request. Requires: signature_request_create → requestId, case_file_create → caseFileId. Provide a string |
| Lists documents in a signature request with their signing status per document. Requires: signature_request_create → requestId, case_file_create → caseFileId. IMPORTANT: when called with documentId it returns participant signing status (PENDING = not yet signed), NOT document processing status. To check if documents reached READY_TO_SIGN (required before activate_signature_request), use signature_request_get instead. Post-activation: poll until document status === SIGNED before calling signature_certificate_get. |
| Adds a participant (signatory, observer, or validator) to a DRAFT signature request. Requires: signature_request_add_document → documentId + file uploaded to S3, signature_request_create → requestId, case_file_create → caseFileId. Use role SIGNATORY for required signers, OBSERVER for read-only, VALIDATOR for approvers. For ADVANCED signatures, phonePrefix and phoneNumber are mandatory because the signer receives the OTP there; WhatsApp delivery is NOT currently supported for ADVANCED. For INTERPOSITION signatures, phone is optional, and WhatsApp sending is currently available only for this simple/interposition flow when the platform is configured to send a WhatsApp signing link. Returns signatoryId. Add at least one SIGNATORY before activating. For VALIDATOR role: do NOT include groupId or linkToAllDocuments — use assign_validator_to_signatory to link the validator to a specific signatory after creation. |
| Lists all participants of a signature request. Requires: signature_request_create → requestId, case_file_create → caseFileId. Returns roles, contact details, and signing status. |
| Assigns one or more validators to a specific signatory in a signature request. The validator must approve before the signatory can sign. Requires: signature_participant_create (validator) → validatorId in validatorIds array, signature_participant_create (signatory) → signatoryId, signature_request_create → requestId, case_file_create → caseFileId. |
| Activates a signature request, transitioning from DRAFT to ACTIVE and sending signing invitations to all signatories. Do NOT call this immediately after uploading files. Activation preconditions: request is DRAFT; at least one SIGNATORY exists; every document has been uploaded to its presigned URL; backend processing has had time to complete for every uploaded document (use processed/READY_TO_SIGN from signature_request_get when exposed; otherwise wait after the successful PUT); and PDF documents have signature coordinates set for every required signatory. INTERPOSITION may send a simple signing link, including WhatsApp when available/configured; ADVANCED uses phonePrefix/phoneNumber for OTP and currently does not support WhatsApp delivery. IRREVERSIBLE: cannot add documents or participants after activation. ASYNC: after activation, poll signature_request_get until status is ACTIVE, then use signature_document_list with documentId to monitor signing; call signature_certificate_get only after the document is SIGNED. |
| Sets the visual position of the signature field on a PDF document page. Required for PDF documents before activation, for both INTERPOSITION and ADVANCED signatures. Requires: signature_participant_create → signatoryId, signature_request_add_document → documentId, signature_request_create → requestId, case_file_create → caseFileId. Provide coordinates as array of {page (1-based), x (points from left), y (points from bottom)}. Set coordinates after the document has been uploaded and before activate_signature_request. |
| Retrieves the signed document certificate PDF. Requires: activate_signature_request (document fully SIGNED), signature_request_add_document → documentId, signature_request_create → requestId, case_file_create → caseFileId. Returns documentUrl (signed PDF certificate). ASYNC: poll until documentUrl is available. |
| Initiates a large file upload for an evidence group against the EAD Enterprise Suite API. Required: id, caseFileId, evidenceGroupId, title, fileName, hash (SHA-256 hex), fileSize (bytes), custodyType. Returns a multipart upload ID and presigned URLs for each part. Use for files over 5 MB. Follow with large_evidence_upload_complete once all parts are uploaded. |
| Completes a large file upload and seals the evidence group. Requires: large_evidence_upload_initiate → upload parts completed, case_file_create → caseFileId, evidence_group_create → evidenceGroupId. ASYNC: triggers TSP timestamping. Poll evidence_group_list until status === CLOSED. |
| Uploads a local file as evidence in one step: computes its SHA-256, registers the evidence record (custodyType INTERNAL = EAD stores the file), and uploads the bytes to S3 — no manual hashing or PUT needed. Internally this follows the required EAD sequence: create INTERNAL evidence → receive uploadFileUrl (presigned S3 URL) → PUT file bytes → return uploaded:true. Requires: case_file_create → caseFileId, evidence_group_create → evidenceGroupId. Provide EXACTLY ONE of |
Coexistence
This MCP server is the current, actively maintained interface for the EAD Enterprise Suite API.
If you previously used an earlier MCP server for EAD Enterprise Suite (prior to v1.0), note that this server supersedes it. Both servers can run side-by-side during a migration window — they connect to the same upstream API and share no local state. To avoid duplicate tool names in multi-server MCP setups, run only one at a time once migration is complete.
License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/g-digital-by-Garrigues/EAD_Enterprise_Suite_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server