{"name":"io.github.g-digital-by-Garrigues/ead-enterprise-suite","slug":"g-digital-by-garrigues-ead-enterprise-suite","title":null,"description":"MCP server for EAD Enterprise Suite - signatures, evidence, notifications, dossiers via AI agents.","url":"https://mcp.market/server/g-digital-by-garrigues-ead-enterprise-suite","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":26,"stars":0,"forks":0,"downloads_week":136,"last_push_at":"2026-09-08T17:16:37.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/g-digital-by-Garrigues/EAD_Enterprise_Suite_MCP","website":null,"version":"2.0.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@g-digital/mcp-ead-enterprise-suite","version":"2.0.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"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).","name":"MCP_ALLOW_INSECURE_FILE_URL"},{"description":"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.","name":"MCP_ALLOW_UNVERIFIED_BEARER"},{"description":"Comma-separated allowed Host headers. Empty = Host validation disabled (default). When set, requests with a Host outside the list are rejected.","name":"MCP_ALLOWED_HOSTS"},{"description":"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.","name":"MCP_ALLOWED_ORIGINS"},{"description":"Upstream API root. Required: your user key is exchanged for a session token against this host, and the server will not start without it.","isRequired":true,"name":"MCP_API_BASE_URL"},{"description":"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. (See https://www.eadtrust.eu/soluciones-legaltech/enterprise-suite/ for credential acquisition.)","isRequired":true,"isSecret":true,"name":"MCP_AUTH_USER_KEY"},{"description":"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).","name":"MCP_HTTP_HOST"},{"description":"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.","name":"MCP_HTTP_MAX_BODY_BYTES"},{"description":"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).","name":"MCP_HTTP_PUBLIC"},{"description":"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.","name":"MCP_SVC_CLIENT_ID"},{"description":"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.)","isSecret":true,"name":"MCP_SVC_CLIENT_SECRET"},{"description":"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.","name":"MCP_SVC_INTROSPECT_URL"},{"description":"HTTP port when running in hosted (HTTP) mode; ignored in stdio mode","name":"PORT"}]}],"tools":[{"name":"activate_signature_request","description":"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","write_action":false,"price_micros":0,"input_schema":null},{"name":"assign_validator_to_signatory","description":"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) \\u2192 validatorId in validatorIds array, signature_participant_create (signatory) \\u2192 signatoryId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"case_file_create","description":"Creates a new case file \\u2014 the top-level container for all related operations (evidence, notifications, signatures, dossiers). Call this first before any other operation. Generate a UUID v4 for `id`. Returns caseFileId needed for all subsequent calls.","write_action":true,"price_micros":0,"input_schema":null},{"name":"case_file_delete","description":"Deletes a case file and everything filed inside it \\u2014 evidence groups, dossiers, notifications and their certificates. Irreversible, with no confirmation step and no recycle bin. Requires: caseFileId. Returns no body (HTTP 204); confirm with case_file_list. Do not call it to 'clean up' unless the user asked for that case file to be destroyed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"case_file_get","description":"Retrieves details of a specific case file. Requires: caseFileId. Use to verify a case file exists before creating evidence groups, dossiers, or signature requests.","write_action":false,"price_micros":0,"input_schema":null},{"name":"case_file_list","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_certify","description":"Certifies a dossier, generating a tamper-evident PDF and locking all linked evidence. Requires: dossier_create \\u2192 dossierId, dossier_evidence_link (evidence linked), case_file_create \\u2192 caseFileId. ASYNC: transitions DRAFT \\u2192 CERTIFYING \\u2192 CERTIFIED. Poll dossier_list until dossierId status === CERTIFIED.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_create","description":"Creates a dossier to aggregate certified evidence groups into a single tamper-evident PDF. Requires: case_file_create \\u2192 caseFileId. Evidence groups must be in CLOSED status before linking. Generate a UUID v4 string for `id`. Returns dossierId. After creation, link evidence with dossier_evidence_link, then certify with dossier_certify.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dossier_delete","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dossier_document_url","description":"Returns the download URL for the certified dossier PDF. Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_delete","description":"Removes an evidence item from a dossier. Only available while dossier is in DRAFT status. Requires: caseFileId, dossierId, evidenceId.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_get","description":"Retrieves details of a specific evidence item linked to a dossier. Requires: caseFileId, dossierId, evidenceId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_link","description":"Links evidence items from a sealed group to a dossier. Requires: dossier_create \\u2192 dossierId, evidence_seal (CLOSED), case_file_create \\u2192 caseFileId. Pass the ids array of evidence UUIDs. Can be called multiple times for evidence from different case files.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_list","description":"Lists the evidence items linked to ONE evidence group of a dossier. Requires: caseFileId, dossierId AND dossierEvidenceGroupId \\u2014 all three are mandatory. For every evidence item in the dossier regardless of group, use dossier_evidence_list_by_dossier instead. Supports filter, order and page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_list_by_dossier","description":"Lists every evidence item linked to a dossier, across all of its evidence groups. Requires: caseFileId and dossierId. This is the dossier-wide view; dossier_evidence_list is the narrower per-group one and additionally needs a dossierEvidenceGroupId. Supports filter, order and page. Returns { data, meta.totalElements }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_evidence_list_to_link","description":"Lists evidence items available to be linked to a dossier (CLOSED groups not yet linked). Requires: caseFileId and dossierId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_get","description":"Retrieves full details of a specific dossier including status, linked evidence, and download URLs. Requires: caseFileId and dossierId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_group_certify","description":"Creates AND certifies a dossier from a single sealed evidence group in one call (express path). Requires: evidence_seal (CLOSED), case_file_create \\u2192 caseFileId, evidence_group_create \\u2192 evidenceGroupId. Generate a UUID v4 string for `id`. Returns dossierId with CERTIFYING status \\u2192 poll until CERTIFIED.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dossier_list","description":"Lists all dossiers in a case file. Requires: caseFileId. Returns paginated list with IDs, names, status, and creation dates. Use to monitor certification progress \\u2014 poll until status: CERTIFIED.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_list_by_user","description":"Lists every dossier belonging to a user, across all of their case files. Requires: userId (from session_login or session_info). Use this when you do not know which case file a dossier is in; use dossier_list when you already have a caseFileId. Supports filter, order and page. Returns { data, meta.totalElements }.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_package_url","description":"Returns the download URL for the full dossier package (PDF + evidence files). Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_preview","description":"Returns an HTML preview URL of a dossier before certification. Requires: caseFileId and dossierId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_template_list","description":"Lists available dossier templates. No prerequisites. Returns template IDs and their translations per language. Use the returned id as dossierTemplateId in dossier_create.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dossier_update","description":"Updates the metadata of an existing dossier. Requires: dossier_create \\u2192 dossierId, caseFileId. Only available while dossier is in DRAFT status.","write_action":true,"price_micros":0,"input_schema":null},{"name":"dossier_visibility","description":"Updates the visibility (public/private) of a certified dossier. Requires: dossier_certify (CERTIFIED status), caseFileId, dossierId.","write_action":true,"price_micros":0,"input_schema":null},{"name":"evidence_create","description":"Registers a NEW evidence record inside an evidence group. Requires: evidence_group_create \\u2192 evidenceGroupId, case_file_create \\u2192 caseFileId. Generate a UUID v4 for `id`. Compute the SHA-256 hex hash of the file BEFORE calling. Normal INTERNAL flow: call evidence_create with custodyType INTERNAL and NO fileUrl; the API returns uploadFileUrl, a presigned S3 URL. You MUST PUT the exact file ","write_action":true,"price_micros":0,"input_schema":null},{"name":"evidence_get","description":"Retrieves a specific evidence record. Requires: evidence_create \\u2192 evidenceId, evidence_group_create \\u2192 evidenceGroupId, case_file_create \\u2192 caseFileId. Returns status (COMPLETED|IN_PROCESS|ERROR), hash, and tspTimestamp when certified.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evidence_group_create","description":"Creates an evidence group inside a case file. Requires: case_file_create \\u2192 caseFileId. Generate a UUID v4 for `id`. Set evidenceType to FILE, PHOTO, VIDEO, or WEB_PLUGIN. Returns evidenceGroupId. One group can contain multiple evidence records.","write_action":true,"price_micros":0,"input_schema":null},{"name":"evidence_group_list","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evidence_list","description":"Lists all evidence records in a specific evidence group. Requires: caseFileId and evidenceGroupId. Returns paginated list with IDs, titles, status, and timestamps.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evidence_seal","description":"Seal and certify an evidence group. Closes the group to new additions and triggers async timestamping. Returns immediately \\u2014 the group transitions OPEN \\u2192 CLOSING \\u2192 CLOSED. Poll evidence_group_list until status is CLOSED before linking to a dossier.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evidence_upload","description":"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 \\u2014 no manual hashing or PUT needed. Internally this follows the required EAD sequence: create INTERNAL evidence \\u2192 receive uploadFileUrl (presigned S3 URL) \\u2192 PUT file bytes \\u2192 return uploaded:true. Requires: cas","write_action":true,"price_micros":0,"input_schema":null},{"name":"id_verification_contract_url","description":"Retrieves the signed identity-verification contract for one completed verification. Requires: verificationId \\u2014 the id you generated for id_verification_video_create, or an id from id_verification_list. NOTE: the OpenAPI specification declares a 200 response with NO body for this operation, so the exact payload is undeclared and has not been observed against a working deployment; inspect what ","write_action":false,"price_micros":0,"input_schema":null},{"name":"id_verification_list","description":"Lists the identity verifications belonging to a user, with the outcome of each. Requires: userId (from profile_get). Items are { id, email, name, firstSurname, secondSurname, status, identificationType, createdAt, createdBy, rejectedReason, rejectedContext }, so this is where you read whether a verification succeeded and, when it did not, why. Supports filter, order and page. This is the only way ","write_action":false,"price_micros":0,"input_schema":null},{"name":"id_verification_video_create","description":"Starts a REMOTE VIDEO identity verification for one person: the platform contacts them and runs the identification session. Requires: id (UUID v4 you generate), name, firstSurname, email, phonePrefix and phoneNumber. phonePrefix must include the leading + (for example '+34'). secondSurname is optional. Returns HTTP 201 with NO body, so keep the id you generated \\u2014 it is the verificationId, and","write_action":true,"price_micros":0,"input_schema":null},{"name":"large_evidence_upload_complete","description":"Finalize a multipart evidence upload and register the evidence in the group. Returns immediately \\u2014 the evidence transitions asynchronously to COMPLETED. Poll evidence_list until status is COMPLETED before sealing the group.","write_action":true,"price_micros":0,"input_schema":null},{"name":"large_evidence_upload_get","description":"Reports how much of a large evidence upload the platform has actually received. Requires: caseFileId, evidenceGroupId and the evidence id. Returns fileName, totalSizeMB, chunkSizeMB and biggestUploadedOffset \\u2014 compare biggestUploadedOffset against totalSizeMB to decide whether every part landed before calling large_evidence_upload_complete. Use it to resume or diagnose a stalled upload.","write_action":true,"price_micros":0,"input_schema":null},{"name":"large_evidence_upload_initiate","description":"Performs the large_evidence_upload_initiate operation against the GoCertius API. Review the API documentation for full field details.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_certificate_document_url","description":"Returns { documentUrl } for the certificate PDF on its own, WITHOUT the attachments. Requires certificateId, receiverId, notificationRequestId and caseFileId. Wait until the certificate is CERTIFIED: generation is asynchronous and the first call can 404 or come back empty while it is still CERTIFYING, so poll a few times with a bounded retry rather than hammering it. If you want the attachments bu","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_certificate_get","description":"Creates or retrieves a PDF certificate for a specific notification receiver. Requires notification_request_send and notification_receiver_add. Generate a UUID v4 for `id` the first time and reuse that id when polling. This tool is idempotent: it first lists existing certificates for the receiver and, if `id` already exists, returns it instead of creating it again. If the certificate status is CERT","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_certificate_list","description":"Lists the delivery certificates already generated for one recipient, so you can reuse one instead of generating a duplicate. Requires receiverId, notificationRequestId and caseFileId. Returns per certificate: id, status (DRAFT, CERTIFYING, CERTIFIED), language, createdAt, certifiedAt, `partial` \\u2014 whether it is an intermediate certificate issued before the recipient finished responding \\u2014 ","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_certificate_package_url","description":"Returns { packageUrl } for a ZIP containing the certificate AND the notification's attachments \\u2014 the \"with annexes\" form. There is no separate preview flag anywhere in the API: the package carries the annexes, the document is the certificate alone. Requires certificateId, receiverId, notificationRequestId and caseFileId. Same preconditions as notification_certificate_document_url \\u2014 wait ","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_document_add","description":"Attaches a document to a notification. Two steps: this call registers the file and returns { url }, a presigned upload URL, and you then PUT the raw bytes to that URL with an x-amz-checksum-sha256 header. Generate a UUID v4 for `id`, and compute the file's SHA-256 hex hash BEFORE calling \\u2014 it goes in `hash`. ORDER MATTERS AND GETTING IT WRONG FAILS THE SEND: add every document BEFORE adding r","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_document_delete","description":"Removes an attachment from a notification. Requires documentId (from notification_document_list), notificationRequestId and caseFileId.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_document_download_url","description":"Returns { downloadUrl }, a temporary link to an attachment as it was sent. Requires documentId (from notification_document_list), notificationRequestId and caseFileId. Use it to retrieve a file you attached or to verify what a recipient received. The URL is presigned and expires \\u2014 fetch it when you need it rather than storing it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_document_list","description":"Lists the documents attached to a notification with their processing status, and it is what you poll after notification_document_add: a newly registered document starts at PENDING and reaches READY_TO_SEND in roughly 8 seconds. Calling notification_request_send while any document is still PENDING fails with 409/404 NOTIFICATION_NOT_FOUND. Poll with a bounded retry \\u2014 every few seconds, a dozen","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_receiver_add","description":"Adds a recipient to a notification request. Requires: notification_request_create \\u2192 notificationRequestId, case_file_create \\u2192 caseFileId. The `id` can be a UUID v4 or custom string. Returns receiverId \\u2014 save it for notification_certificate_get. Delivery is by email always; set sendWaUrl for a WhatsApp link, sendSmsUrl for an RCS/SMS link (the channel negotiates: RCS where the handse","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_receiver_add_bulk","description":"Adds several recipients in one call instead of one notification_receiver_add per person. Pass `receivers` as an array; each entry needs `id` (you generate it), firstName, lastName and email, and may carry phonePrefix (with the +) and phoneNumber. Note this bulk form does NOT accept the per-recipient otpRequired, sendWaUrl or sendSmsUrl flags that the single-recipient tool does \\u2014 set the defau","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_receiver_delete","description":"Removes a recipient from a notification. Requires receiverId, notificationRequestId and caseFileId. To remove every address the platform rejected in one call, use notification_receiver_invalid_purge rather than deleting them one by one.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_receiver_invalid_purge","description":"Removes every recipient whose status is INVALID \\u2014 addresses the platform rejected as malformed or duplicated \\u2014 from a notification in a single call. Requires notificationRequestId and caseFileId. Recipients in any other status are left untouched. AN INVALID RECIPIENT BLOCKS THE SEND, so run this (or fix the addresses with notification_receiver_update) before notification_request_send, or","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_receiver_list","description":"Lists a notification's recipients with their individual delivery state. Returns per recipient: id, firstName, lastName, email, phonePrefix/phoneNumber, status (INVALID, READY_TO_SEND, SENT, READ, ANSWERED, ERROR), statusUpdatedAt, `answer` once they respond, emailBounced, and validationError (TAKEN, IS_DEFINED, IS_INVALID) for a rejected address. Worth calling before notification_request_send to s","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_receiver_update","description":"Corrects a recipient's details: firstName, lastName, email, phonePrefix, phoneNumber. Requires receiverId, notificationRequestId and caseFileId. Use this to fix a mistyped address rather than deleting and re-adding, which would lose the receiverId. phonePrefix must include the + (for example +34). A phone number is required if the recipient is to receive the RCS/SMS link (sendSmsUrl), the WhatsApp","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_request_case_file_move","description":"Moves a notification to a different case file. Note the two caseFileId values: the one in the path is where the notification is NOW, and the one in the body is the destination. Notifications are grouped by case file, and this is the only way to change that grouping without duplicating.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_request_create","description":"Creates a certified notification request. Requires: case_file_create \\u2192 caseFileId. Generate a UUID v4 for `id`. Set language to en_GB or es_ES. Returns notificationRequestId. Add at least one receiver with notification_receiver_add before sending. IMPORTANT: The `content` field must be valid HTML \\u2014 plain text without HTML tags will not render on the recipient landing page. Only the follo","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_request_delete","description":"Deletes a notification. Requires notificationRequestId and caseFileId. There is no undo. TESTED: once the notification has been sent the API rejects this with 403 Forbidden \\u2014 a sent notification is delivery evidence and cannot be removed. If you only want it filed elsewhere, use notification_request_case_file_move instead.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_request_duplicate","description":"Creates a new DRAFT notification from an existing one, copying its content, its recipients and its attachments. Works whatever state the original is in, so this is how you resend to the same people or reuse a sent notification as a template. Generate a UUID v4 for `id` and supply a new `subject`; pass `caseFileId` in the body to place the copy in a different case file, or omit it to keep it alongs","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_request_list","description":"Lists the certified notifications visible to a user. Requires userId (from session_login, session_info or profile_get) \\u2014 this listing is user-scoped, not case-file-scoped, so it spans every case file unless you filter. Use this to recover a notificationRequestId you no longer have; it is the only way to find one. Returns per notification: id, code, subject, status, type, sentAt, receiverStats","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_request_send","description":"Trigger delivery of a certified notification to all added recipients. Returns immediately \\u2014 delivery is async. Poll notification_request_status until status is DELIVERED before retrieving certificates.","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_request_status","description":"Checks the delivery status of a certified notification. Requires: notificationRequestId, caseFileId. Returns status (CREATING|DRAFT|IN_PROCESS|SENT|PARTIALLY_READ|FULLY_READ|PARTIALLY_ANSWERED|FULLY_ANSWERED). Poll until status is SENT or beyond. Do not call notification_certificate_get while status is CREATING, DRAFT, or IN_PROCESS.","write_action":false,"price_micros":0,"input_schema":null},{"name":"notification_request_update","description":"Edits a notification that has not been sent: subject, content, type and language. Requires notificationRequestId and caseFileId. `content` must be valid HTML \\u2014 plain text is accepted by the API but does NOT render on the recipient landing page. Supported tags only: <p>, <strong>, <em>, <ul><li>, <ol><li>; no other tags and no CSS. Keep `subject` to plain ASCII (no em dashes, no smart quotes),","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_send","description":"Sends a certified notification to one or more recipients in a single call: creates the notification request, adds every recipient, and sends it. Generates every UUID itself \\u2014 do not pass any id. Requires case_file_create \\u2192 caseFileId. `content` MUST be HTML: plain text is accepted by the API and reports SENT but does not render on the recipient's landing page. Supported tags only: <p>, <","write_action":true,"price_micros":0,"input_schema":null},{"name":"notification_send_with_attachments","description":"Sends a certified notification WITH one or more attached documents to one or more recipients, in a single call. Use notification_send instead when there are no attachments. This tool exists separately because attachments impose an ordering rule the API enforces and does not forgive: documents must be registered and fully uploaded BEFORE any recipient is added, and every document must reach READY_T","write_action":true,"price_micros":0,"input_schema":null},{"name":"profile_get","description":"Returns the authenticated user's own profile. It identifies the caller from the session token alone \\u2014 no email or any other input needed \\u2014 so it works on every deployment, including a per-request Bearer one. Its `id` field IS your userId (UUID): the value required by case_file_list and every /users/{userId}/... operation. Prefer this over session_info when you need the userId: it is the ","write_action":false,"price_micros":0,"input_schema":null},{"name":"session_info","description":"Returns the authenticated user's session info. `type` is how this MCP session authenticated \\u2014 always 'UserKey', the server's only auth flow. `accountLoginType` is a different fact: how the underlying EAD Enterprise Suite account itself signs in ('Password' or 'OpenId'), reported from GET /profile, null if the API omits it. Use this to retrieve the userId (UUID) required by case_file_list and ","write_action":false,"price_micros":0,"input_schema":null},{"name":"session_login","description":"Force the EAD Enterprise Suite MCP server to re-authenticate. Takes no parameters and accepts no credentials: the server re-exchanges the user key it was configured with (MCP_AUTH_USER_KEY) for a fresh session token, and this tool reports the resulting userId and expiry. The server manages authentication automatically \\u2014 call this only to force a re-login or after a 401.","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_certificate_get","description":"Retrieves the signed document certificate PDF. Requires: activate_signature_request (document fully SIGNED), signature_request_add_document \\u2192 documentId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Returns documentUrl (signed PDF certificate). ASYNC: poll until documentUrl is available.","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_coordinate_set","description":"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 \\u2192 signatoryId, signature_request_add_document \\u2192 documentId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Provide coordinates as array of {page (1-based","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_document_list","description":"Lists the documents of a signature request with a document-level status and per-document statistics. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Items are { id, requestId, groupId, status, title, fileName, fileSize, convertToPdf, participantStats, signatoryStatusStats, signatoryCoordinatesStats } \\u2014 for example status PARTIALLY_SIGNED with signatory","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_document_observer_list","description":"Lists the OBSERVERS of one document in a signature request \\u2014 participants created with role OBSERVER, who receive a copy but never sign. Requires: signature_request_add_document \\u2192 documentId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Items carry only { id, email, firstName, lastName }: there is deliberately no status field, because an observer has not","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_document_signatory_list","description":"Lists the SIGNATORIES of one document in a signature request, with each signatory's status on that document. Requires: signature_request_add_document \\u2192 documentId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Items are { id, groupId, email, firstName, lastName, status, coordinates, uniqueValidator, phonePrefix, phoneNumber, participantStats } and status is PE","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_group_create","description":"Creates a signing order group for a CONFIGURABLE signature request. Types: 'Document' (groups documents into signing rounds \\u2014 use its id as groupId in signature_request_add_document), 'Signatory' (groups signatories into signing rounds \\u2014 use its id as groupId in signature_participant_create), 'DocumentSignatory' (links a specific document to a signing round, requires documentId). IMPORTA","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_group_list","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_participant_add_bulk","description":"Adds many participants to a DRAFT signature request in one call instead of one signature_participant_create per person. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId, and a `participants` array whose entries take the same fields as signature_participant_create, including the `id` and `role` you generate for each. Mixed roles in one call are allowed. Return","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_participant_create","description":"Adds one participant to a DRAFT signature request. This is the ONLY participant create endpoint: `role` selects SIGNATORY (must sign), OBSERVER (receives a read-only copy) or VALIDATOR (must approve before its signatory can sign). Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId, plus role, firstName, lastName and email. YOU generate `id` (UUID v4) and the ca","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_participant_delete","description":"Removes one participant from a signature request. Requires: signature_participant_create \\u2192 participantId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Use it to drop someone added by mistake, or to change a role (delete, then create again with the new role, since role is not updatable). Returns no body; confirm with signature_participant_list. To drop every i","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_participant_invalid_purge","description":"Removes every participant of a signature request that the platform has marked invalid, in one call. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. signature_participant_list identifies them via `valid: false` and `validationError` \\u2014 typically an undeliverable email or a malformed phone number. Returns no body; confirm with signature_participant_list. ","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_participant_list","description":"Lists every participant of a signature request with the role each was created under \\u2014 SIGNATORY, OBSERVER or VALIDATOR \\u2014 plus contact details and validity. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Items are { id, requestId, groupId, role, firstName, lastName, email, phonePrefix, phoneNumber, createdAt, editable, emailBounced, valid, validat","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_participant_update","description":"Corrects a participant's details before the signature request is activated. Requires: signature_participant_create \\u2192 participantId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Any of groupId, firstName, lastName, email, phonePrefix and phoneNumber may be sent. The role CANNOT be changed, so to turn a signatory into an observer, delete it and create it again.","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_request_add_document","description":"Adds a document to a DRAFT signature request. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Provide a string `id` for the document. Compute SHA-256 hex hash of the PDF before calling. Optional: pass `fileUrl` (a publicly accessible URL) to have the tool download and upload the file to S3 automatically \\u2014 no separate PUT needed. If fileUrl is omitted, ","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_request_cancel","description":"Cancels an active signature request. Requires: activate_signature_request (ACTIVE status), requestId, caseFileId. Transitions to CANCELLED. Cannot be undone.","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_request_create","description":"Creates a new signature request in DRAFT status. Requires: case_file_create \\u2192 caseFileId. Generate a UUID v4 for `id`. Set deadline as ISO 8601 datetime (max ~30 days ahead). Returns requestId. Add documents with signature_request_add_document and participants with signature_participant_create before activating.","write_action":true,"price_micros":0,"input_schema":null},{"name":"signature_request_get","description":"Retrieves full details of a signature request. Requires: signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Returns status, documents, participants, deadline, and history. Use to check overall process state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_signatory_progress_list","description":"Lists the documents assigned to ONE signatory of a signature request, with that signatory's progress on each. Requires: caseFileId, requestId and signatoryId. The signatoryId is the `id` of a participant whose role is SIGNATORY \\u2014 read it from signature_participant_list or signature_document_signatory_list. Passing a participant id whose role is not SIGNATORY returns 404 'Signatory not found' ","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_validator_list","description":"Lists the validators currently linked to ONE signatory of a signature request. Requires: signature_participant_create (signatory) \\u2192 signatoryId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. Items carry { id, email, firstName, lastName }, where each `id` is a validatorId. Note the two-step model: creating a participant with role VALIDATOR does not attach it to","write_action":false,"price_micros":0,"input_schema":null},{"name":"signature_validator_unassign","description":"Unlinks one validator from one signatory, reversing assign_validator_to_signatory. Requires: signature_validator_list \\u2192 validatorId, signature_participant_create (signatory) \\u2192 signatoryId, signature_request_create \\u2192 requestId, case_file_create \\u2192 caseFileId. This removes the LINK only: the validator remains a participant of the request, so use signature_participant_delete to rem","write_action":false,"price_micros":0,"input_schema":null},{"name":"use_case_list","description":"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.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-09-20T00:24:49.164Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:24:49.154Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 11 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/server.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@g-digital/mcp-ead-enterprise-suite","version":"2.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-08T07:58:44.211Z","repositoryUrl":"git+https://github.com/g-digital-by-Garrigues/EAD_Enterprise_Suite_MCP.git","weeklyDownloads":136}],"repo":{"found":true,"owner":"g-digital-by-Garrigues","repo":"EAD_Enterprise_Suite_MCP","archived":false,"pushedAt":"2026-09-08T17:16:37Z","stars":0,"forks":0,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/276937538?v=4","ownerCreatedAt":"2026-04-17T09:42:59Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/276937538?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":136,"license":"MIT","lastPushAt":"2026-09-08T17:16:37.000Z","score":26}}}},"grade_history":[],"reviews":[]}