# io.github.g-digital-by-Garrigues/ead-factory (npm · @g-digital/mcp-ead-factory)

MCP server for EAD Factory: qualified evidence, signature, notifications and chat via AI agents.

- Trust score: 66/100 (medium)
- Change this week: +42
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@g-digital/mcp-ead-factory`: 66/100 (this document), [markdown](https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory.md), [page](https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory)

## Channel facts

- Registry: `npm`
- Package: `@g-digital/mcp-ead-factory`
- Version: `1.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (110 of 114), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (110 of 114), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Build provenance is cryptographically sound, but it attests a different repository to the one declared in the registry. Most often the declared URL is simply stale.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 11 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 8966 tokens (~140/item across 64 items; 64 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 81/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 34% of tool parameters carry a description.
  - Structured output schemas are declared (59% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add g-digital-by-garrigues-ead-factory -- npx -y @g-digital/mcp-ead-factory
```

### Codex

```bash
codex mcp add g-digital-by-garrigues-ead-factory -- npx -y @g-digital/mcp-ead-factory
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "g-digital-by-garrigues-ead-factory": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@g-digital/mcp-ead-factory"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add g-digital-by-garrigues-ead-factory --command npx --arg -y --arg @g-digital/mcp-ead-factory
```

### Hermes

```yaml
mcp_servers:
  g-digital-by-garrigues-ead-factory:
    command: "npx"
    args: ["-y", "@g-digital/mcp-ead-factory"]
```

### Other

```json
{
  "mcpServers": {
    "g-digital-by-garrigues-ead-factory": {
      "command": "npx",
      "args": [
        "-y",
        "@g-digital/mcp-ead-factory"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 65, +27)

- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Provenance: Build provenance is cryptographically sound, but it attests a different repository to the one declared in the registry. Most often the declared URL is simply stale.
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-08-01 (score 38, +14)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 24, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-28 (score 42, +18)

- [functional regression] Security disclosure: unverified → fail
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 59
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 34
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (64)

### `evidence_case_file_delete_bulk` (~90 tokens)

Permanently deletes SEVERAL case files in one call. Destructive and not reversible — confirm the caseFileIds first (evidence_case_file_search) and prefer closing a case file via evidence_case_file_status_update when you only need to end work on it.

Input parameters:

- `ids` (array, required)
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

### `evidence_case_file_search` (~62 tokens)

Searches case files with optional filters (name, status, dates, pagination). Use to find a caseFileId when you don't have it, or to list what exists before creating a new case file with evidence_case_file_create.

Input parameters:

- `filter` (object, required)

Output parameters:

- `data`

### `evidence_case_file_create` (~176 tokens)

Creates a new case file — the top-level container for evidence groups, evidence, and reports. Use this first, before any other Evidence-manager tool. No prerequisites. Unlike most create tools, `id` is CALLER-SUPPLIED (generate a fresh UUID v4 yourself, this API does not assign one) — there is no `name` field, use `title` instead. Example: evidence_case_file_create({ id: '<generate a UUID v4>', title: 'Q1 2026 audit' }) — use that same id as caseFileId in evidence_group_create.

Input parameters:

- `category` (string)
- `code` (string)
- `description` (string)
- `id` (string, required)
- `metadata`
- `owner` (string)
- `title` (string)

Output parameters:

- `data` (object)

### `evidence_case_file_update_bulk` (~83 tokens)

Updates the editable metadata of SEVERAL case files in one call (each entry carries its own caseFileId and changes). Prefer evidence_case_file_update for a single case file. Requires: the caseFileIds of every case file to update (evidence_case_file_search to find them).

Input parameters:

- `ids` (array, required)
- `patch` (array)

### `evidence_case_file_get` (~78 tokens)

Retrieves a case file's details by id. Use to confirm a case file exists, or to check its status before creating evidence groups or reports under it. Requires: evidence_case_file_create → caseFileId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.

Output parameters:

- `category` (string)
- `code` (string)
- `createdAt` (string)
- `description` (string)
- `groups` (string)
- `id` (string)
- `metadata`
- `owner` (string)
- `status`
- `title` (string)
- `updatedAt` (string)

### `evidence_case_file_update` (~126 tokens)

Updates a single case file's editable metadata (e.g. name, description). Requires: evidence_case_file_create or evidence_case_file_search → caseFileId. To change its OPEN/CLOSE lifecycle state use evidence_case_file_status_update instead.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `category` (string)
- `code` (string)
- `description` (string)
- `metadata` (object)
- `owner` (string)
- `title` (string)

### `evidence_case_file_relationship_assign` (~108 tokens)

Assigns a relationship on a case file, linking it to an external/related entity reference for traceability. Use after creating the case file when your workflow tracks which matter, client, or system record it belongs to. Requires: evidence_case_file_create → caseFileId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `itemType` (string, required)
- `itemValue` (string, required)

### `evidence_case_file_report_preview` (~123 tokens)

Generates an UNSIGNED preview of a case file's evidentiary report so you can check its content before producing the signed version with evidence_case_file_report_generate. Requires: evidence_case_file_create → caseFileId, with sealed evidence groups inside.

Input parameters:

- `additionalData` (object)
- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `data` (object)
- `languageCode` (string, required)
- `metadata` (object)
- `template` (string, required)

Output parameters:

- `data` (object)

### `evidence_case_file_report_generate` (~174 tokens)

Generates the SIGNED evidentiary report of a case file (the certified document covering its sealed evidence). Returns a reportId — then call evidence_case_file_report_pdf_url_get (PDF) or evidence_case_file_report_zip_url_get (full package) to download. Requires: evidence_case_file_create → caseFileId; preview first with evidence_case_file_report_preview.

Input parameters:

- `additionalData`
- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `data` (object)
- `deletionDate` (string)
- `filename` (string)
- `languageCode` (string, required)
- `metadata`
- `reportId` (string, required): MANDATORY. UUID of the report.
- `template` (string, required)

Output parameters:

- `data` (object)

### `evidence_case_file_report_update` (~106 tokens)

Updates a previously generated case-file report's metadata. Requires: evidence_case_file_report_generate → reportId (and the caseFileId it belongs to). Does not re-generate the report content — generate a new report for updated evidence.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `deletionDate`
- `reportId` (string, required): MANDATORY. UUID of the report.

### `evidence_case_file_report_pdf_url_get` (~108 tokens)

Retrieves a download URL for the signed PDF document of a case-file report. Requires: evidence_case_file_report_generate → reportId (plus caseFileId). For the full evidence package (PDF + files + verification data) use evidence_case_file_report_zip_url_get.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `reportId` (string, required): MANDATORY. UUID of the report.

Output parameters:

- `expiration` (string)
- `id` (string)
- `type` (string)
- `url` (string)

### `evidence_case_file_report_zip_url_get` (~95 tokens)

Retrieves a download URL for the complete ZIP package of a case-file report (signed PDF plus evidence files and verification material). Requires: evidence_case_file_report_generate → reportId (plus caseFileId).

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `reportId` (string, required): MANDATORY. UUID of the report.

Output parameters:

- `expiration` (string)
- `id` (string)
- `type` (string)
- `url` (string)

### `evidence_case_file_status_update` (~94 tokens)

Changes a case file's lifecycle status (OPEN or CLOSE). Use CLOSE when work on the case file is finished and it should no longer accept new evidence groups; reopen with OPEN. Requires: evidence_case_file_create or evidence_case_file_search → caseFileId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `status` (required)

### `evidence_report_delete` (~71 tokens)

Permanently deletes a generated report by its reportId. Destructive — the signed document and its package stop being downloadable. Requires: evidence_case_file_report_generate → reportId. The underlying case file and its evidence are NOT touched.

Input parameters:

- `reportId` (string, required): MANDATORY. UUID of the report.

### `evidence_group_evidence_register` (~385 tokens)

Register a new evidence in a group — the first step of a 2-step upload (register, then PUT the file bytes to the returned upload URL). Use for each file you want to add to an OPEN evidence group. Requires: evidence_group_create → evidenceGroupId, evidence_case_file_create → caseFileId, and the file's SHA-256 hash (compute it before calling, or use the evidence_create_sealed composite tool which does this for you). Do not call evidence_group_close until every registered evidence's bytes have been uploaded. Custody type: INTERNAL = EAD Factory stores and custodies the file itself. | EXTERNAL = The file lives outside EAD Factory — you attest to its hash only, EAD Factory never stores the bytes. Testimony (qualified proof) provider family: TSP = Trusted Service Provider — eIDAS-qualified electronic timestamp; the legally strongest proof tier. | DLT = Distributed Ledger Technology — blockchain-anchored proof; immutable and independently verifiable.

Input parameters:

- `capturedAt` (string, required)
- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `createdBy` (string)
- `custodyType` (string, required)
- `deletionDate`
- `deletionType`
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileName` (string)
- `fileSize` (integer)
- `hash` (string, required)
- `metadata`
- `requiredTestimonyProviders` (array, required)
- `testimony` (required)
- `title` (string)
- `type` (string)

Output parameters:

- `expiration` (string)
- `url` (string)

### `evidence_group_evidence_get` (~139 tokens)

Gets one evidence's details (metadata, hash, custody, upload state) inside a specific evidence group. Requires: evidence_case_file_create → caseFileId, evidence_group_create → evidenceGroupId, evidence_group_evidence_register → evidenceId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

Output parameters:

- `capturedAt` (string)
- `caseFileId` (string)
- `createdBy` (string)
- `custodyType` (string)
- `evidenceId` (string)
- `fileName` (string)
- `fileSize` (number)
- `groupId` (string)
- `hash` (string)
- `metadata`
- `status` (object)
- `timestamps` (object)
- `title` (string)

### `evidence_group_evidence_delete` (~134 tokens)

Permanently deletes one evidence from an evidence group. Only makes sense while the group is still OPEN (sealed groups are immutable). Requires: caseFileId + evidenceGroupId + evidence_group_evidence_register → evidenceId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

### `evidence_group_evidence_download_url_create` (~138 tokens)

Creates a temporary download URL for an evidence file stored in a group (INTERNAL custody). Use to retrieve the original bytes after upload. Requires: caseFileId + evidenceGroupId + evidence_group_evidence_register → evidenceId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

### `evidence_group_evidence_upload_url_create` (~177 tokens)

Creates a fresh presigned upload URL for an ALREADY-REGISTERED evidence in a group — step 2 of the register-then-upload flow (PUT the file bytes to the returned URL). Use when the URL from evidence_group_evidence_register expired or was lost. Requires: caseFileId + evidenceGroupId + evidenceId. evidence_create_sealed does all of this automatically.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `requestModel` (object)

### `evidence_thumbnail_url_get` (~132 tokens)

Retrieves a temporary URL for an image evidence's thumbnail at the requested size — use for quick visual verification without downloading the original file. Requires: caseFileId + evidenceGroupId + evidenceId (image-type evidence only) and a thumbnailSize path value.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `groupId` (string, required)
- `thumbnailSize` (string, required)

Output parameters:

- `expiration` (string)
- `id` (string)
- `type` (string)
- `url` (string)

### `evidence_search` (~59 tokens)

Searches evidences across the tenant with optional filters (state, dates, pagination) — not scoped to one group. Use to find an evidenceId or audit what exists; for one group's content use evidence_group_get instead.

Input parameters:

- `filter` (object, required)

Output parameters:

- `data`

### `generate_evidence` (~303 tokens)

Register a new evidence (legacy top-level name; not scoped to a specific evidence group at creation time, unlike evidence_group_evidence_register). Use for standalone evidence outside the group-based flow, or for continuity with the legacy EAD-Factory-MCP integration. Requires the file's SHA-256 hash. Prefer evidence_create_sealed for a new, complete evidence group + evidence + seal flow. Custody type: INTERNAL = EAD Factory stores and custodies the file itself. | EXTERNAL = The file lives outside EAD Factory — you attest to its hash only, EAD Factory never stores the bytes. Testimony (qualified proof) provider family: TSP = Trusted Service Provider — eIDAS-qualified electronic timestamp; the legally strongest proof tier. | DLT = Distributed Ledger Technology — blockchain-anchored proof; immutable and independently verifiable.

Input parameters:

- `capturedAt` (string, required)
- `createdBy` (string)
- `custodyType` (string, required)
- `deletionDate`
- `deletionType`
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileName` (string)
- `fileSize` (integer)
- `hash` (string, required)
- `metadata`
- `requiredTestimonyProviders` (array, required)
- `testimony` (required)
- `title` (string)
- `type` (string)

Output parameters:

- `expiration` (string)
- `url` (string)

### `evidence_update_bulk` (~70 tokens)

Updates the editable metadata of SEVERAL evidences in one call (each entry carries its own evidenceId and changes). Prefer evidence_update for a single evidence. Requires: the evidenceIds to update (evidence_search to find them).

Input parameters:

- `ids` (array, required)
- `patch` (array)

### `get_evidence` (~90 tokens)

Retrieves an evidence record's details and status by id (legacy top-level name). Use to check an evidence's timestamping status (IN_PROCESS / COMPLETED / ERROR) after registration. Requires: generate_evidence or evidence_group_evidence_register → evidenceId.

Input parameters:

- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

Output parameters:

- `capturedAt` (string)
- `caseFileId` (string)
- `createdBy` (string)
- `custodyType` (string)
- `evidenceId` (string)
- `fileName` (string)
- `fileSize` (number)
- `groupId` (string)
- `hash` (string)
- `metadata`
- `status` (object)
- `timestamps` (object)
- `title` (string)

### `evidence_delete` (~86 tokens)

Permanently deletes one evidence by evidenceId (no group path needed). Destructive; sealed content should not be deleted — use only for drafts or mis-registered evidence. Requires: evidence_group_evidence_register or generate_evidence → evidenceId.

Input parameters:

- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

### `evidence_update` (~129 tokens)

Updates a single evidence's editable metadata (e.g. name, description) by evidenceId. The file content and hash are immutable — re-register a new evidence for changed files. Requires: evidence_group_evidence_register or generate_evidence → evidenceId.

Input parameters:

- `createdBy` (string)
- `custody` (string)
- `deletionDate`
- `deletionType`
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `metadata` (object)
- `title` (string)

### `evidence_download_url_create` (~89 tokens)

Creates a temporary download URL for an evidence's stored file when you only hold the evidenceId (no group path needed — same bytes as evidence_group_evidence_download_url_create). Requires: generate_evidence or evidence_group_evidence_register → evidenceId.

Input parameters:

- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.

### `evidence_upload_url_create` (~116 tokens)

Creates a fresh presigned upload URL for an already-registered evidence by evidenceId — step 2 of the register-then-upload flow (PUT the file bytes to the returned URL). Pairs with generate_evidence the way evidence_group_evidence_upload_url_create pairs with evidence_group_evidence_register. Requires: generate_evidence → evidenceId.

Input parameters:

- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileName` (string, required)

### `evidence_temp_file_upload_url_create` (~207 tokens)

Creates a presigned upload URL for a TEMPORARY file not yet registered as evidence. Use for staging content that another operation will reference; for real evidence prefer the register-then-upload flow (evidence_group_evidence_register) or the evidence_create_sealed composite, which handle registration and upload together.

Input parameters:

- `capturedAt` (string, required)
- `caseFileId` (string): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `createdBy` (string, required)
- `evidenceGroupId` (string): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileName` (string, required)
- `metadata` (object)
- `requiredTestimonyProviders` (array)
- `testimony` (object, required)
- `title` (string, required)

### `evidence_multipart_upload_start` (~211 tokens)

Starts a MULTIPART upload session for a large evidence file (returns the upload coordinates for uploading the file in parts). Use when a single presigned PUT is not enough for the file size. Requires: an already-registered evidence (evidence_group_evidence_register or generate_evidence → evidenceId) and the file name.

Input parameters:

- `capturedAt` (string, required)
- `caseFileId` (string): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `createdBy` (string, required)
- `evidenceGroupId` (string): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidenceId` (string, required): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileName` (string, required)
- `metadata` (object)
- `requiredTestimonyProviders` (array)
- `testimony` (object, required)
- `title` (string, required)

### `evidence_group_delete_bulk` (~122 tokens)

Permanently deletes SEVERAL evidence groups of one case file in one call. Destructive — prefer evidence_group_discard for a single group, and never delete sealed groups that back issued reports. Requires: caseFileId + the evidenceGroupIds to delete (evidence_group_search to find them).

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `ids` (array, required)
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

### `evidence_group_create` (~231 tokens)

Creates an evidence group inside a case file — evidence records are always registered inside a group, never standalone (except via the legacy generate_evidence tool). Use when starting a new batch of related evidence (e.g. all files for one incident). Like evidence_case_file_create, `id` is CALLER-SUPPLIED (generate a fresh UUID v4 yourself). Requires: evidence_case_file_create → caseFileId. Example: evidence_group_create({ id: '<generate a UUID v4>', caseFileId, type: 'FILE' }) returns { status: 'OPEN', ... } — use that same id as evidenceGroupId in evidence_group_evidence_register, then evidence_group_close once every evidence in the group has been uploaded.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `code` (string)
- `createdBy` (string)
- `description` (string)
- `id` (string, required)
- `metadata`
- `name` (string)
- `type` (string, required)

Output parameters:

- `data` (object)

### `evidence_group_get` (~117 tokens)

Gets one evidence group's details — status (OPEN/CLOSED), seal information, and its evidences with their upload states. Use to verify every file was uploaded before evidence_group_close, or to check the seal after closing. Requires: caseFileId + evidence_group_create → evidenceGroupId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.

Output parameters:

- `caseFileId` (string)
- `code` (string)
- `collectionMetadataId` (string)
- `createdAt` (string)
- `createdBy` (string)
- `description` (string)
- `discarded` (boolean)
- `evidences` (object)
- `id` (string)
- `metadata`
- `name` (string)
- `status` (string)
- `type` (string)

### `evidence_group_discard` (~120 tokens)

Discards (deletes) an OPEN evidence group and its registered evidences — use to abandon a group you no longer intend to seal. Destructive; sealed (CLOSED) groups are immutable evidence and should not be discarded. Requires: caseFileId + evidence_group_create → evidenceGroupId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.

### `evidence_group_update` (~136 tokens)

Updates an evidence group's editable metadata (e.g. name, description). Only meaningful while the group is OPEN — sealed groups are immutable. Requires: caseFileId + evidence_group_create → evidenceGroupId.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `code` (string)
- `createdBy` (string)
- `description` (string)
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `metadata` (object)
- `name` (string)

Output parameters:

- `data` (object)

### `evidence_group_close` (~207 tokens)

Seals (closes) an evidence group, triggering qualified timestamping — after this, no more evidence can be added. Use only after every evidence registered in the group has had its file bytes uploaded to the presigned URL from evidence_group_evidence_register. Requires: evidence_group_create → evidenceGroupId, evidence_case_file_create → caseFileId, and the current evidencesCount. ASYNC: the group transitions OPEN → CLOSING → CLOSED; poll evidence_group_get until status is CLOSED before generating a report. Prefer the evidence_create_sealed composite tool for a new group — it registers, uploads, closes, and waits for CLOSED in one call.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file. Obtain from evidence_case_file_create.
- `collectMetadata`
- `evidenceGroupId` (string, required): MANDATORY. UUID of the evidence group. Obtain from evidence_group_create.
- `evidencesCount` (integer, required)

Output parameters:

- `data` (object)

### `evidence_group_search` (~55 tokens)

Searches evidence groups across case files with optional filters (status, dates, pagination). Use to find an evidenceGroupId or list groups pending sealing; for one group's full detail use evidence_group_get.

Input parameters:

- `filter` (object, required)

Output parameters:

- `data`

### `evidence_group_update_bulk` (~75 tokens)

Updates the editable metadata of SEVERAL evidence groups in one call (each entry carries its own evidenceGroupId and changes). Prefer evidence_group_update for a single group. Requires: the evidenceGroupIds to update (evidence_group_search to find them).

Input parameters:

- `ids` (array, required)
- `patch` (array)

### `evidence_report_pdf_url_get` (~74 tokens)

Retrieves a download URL for a report's signed PDF when you only hold the reportId (no caseFileId path needed — same document evidence_case_file_report_pdf_url_get returns). Requires: evidence_case_file_report_generate → reportId.

Input parameters:

- `reportId` (string, required): MANDATORY. UUID of the report.

Output parameters:

- `expiration` (string)
- `id` (string)
- `type` (string)
- `url` (string)

### `evidence_report_zip_url_get` (~68 tokens)

Retrieves a download URL for a report's complete ZIP package when you only hold the reportId (same package evidence_case_file_report_zip_url_get returns). Requires: evidence_case_file_report_generate → reportId.

Input parameters:

- `reportId` (string, required): MANDATORY. UUID of the report.

Output parameters:

- `expiration` (string)
- `id` (string)
- `type` (string)
- `url` (string)

### `create_signature_request` (~181 tokens)

Creates a new signature request — the top-level container for documents and signatories in a signing flow. Use this first, before add_document_to_signature_request. No prerequisites. Example: create_signature_request({ name: 'NDA — Acme Corp', createdBy: 'jane@company.com' }) returns { id, ... } — use the returned id as signatureRequestId in subsequent calls.

Input parameters:

- `closeConfig` (object)
- `createdBy` (string, required)
- `description` (string)
- `language` (string)
- `name` (string, required)
- `notifications` (boolean)
- `provider` (string)
- `senderAddress` (string)
- `senderName` (string)
- `signatureRequestBody` (array)
- `uniqueValidator` (boolean)
- `webhookUris` (array)

Output parameters:

- `cancellationReason` (string)
- `createdBy` (string)
- `description` (string)
- `id` (string)
- `language` (string)
- `name` (string)
- `notifications` (boolean)
- `provider` (string)
- `senderAddress` (string)
- `senderName` (string)
- `signatureRequestBody` (array)
- `status` (string)
- `uniqueValidator` (boolean)
- `webhookUris` (array)

### `add_document_to_signature_request` (~331 tokens)

Adds a document to a signature request — the first step of a 2-step upload (add, then PUT the file bytes to the returned upload URL). Use once per document that needs signing. Requires: create_signature_request → signatureRequestId, and the document's SHA-256 hash (compute it before calling, or use the signature_request_full composite tool). Add signatories with add_signatory_to_document before activating. Signature type: INTERPOSITION = EAD Factory mediates the signing act on the signatory's behalf (e.g. an OTP sent via WhatsApp/SMS) — the signatory needs no software or certificate. | ADVANCED = Advanced electronic signature — the signatory signs directly (signing pad or certificate); a stronger legal tier than INTERPOSITION. | OTHER = A signature type not covered by INTERPOSITION or ADVANCED.

Input parameters:

- `certificateFiles` (object)
- `convertToPdf` (boolean)
- `description` (string)
- `detached` (boolean)
- `evidenceId` (string): MANDATORY. UUID of the evidence record. Obtain from evidence_group_evidence_register or generate_evidence.
- `fileSize` (integer)
- `filename` (string, required)
- `hash` (string, required)
- `metadata` (object)
- `provider` (string)
- `sequence` (integer)
- `signatureDeadline` (string)
- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.
- `signatureType` (string, required)
- `title` (string, required)

Output parameters:

- `expiration` (string)
- `id` (string)
- `url` (string)

### `add_signatory_to_document` (~181 tokens)

Adds a signatory (by name + email) to a document within a signature request. Use once per person who needs to sign that specific document. Requires: create_signature_request → signatureRequestId, add_document_to_signature_request → documentId. Add all signatories before calling activate_signature_request — signatories cannot be added after activation.

Input parameters:

- `coordinates` (array)
- `documentId` (string, required): MANDATORY. UUID of the document within the signature request. Obtain from add_document_to_signature_request.
- `email` (string, required)
- `name` (string, required)
- `phone` (string)
- `sequence` (integer)
- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.
- `surnames` (string)
- `uniqueValidator` (boolean)

Output parameters:

- `coordinates` (array)
- `documentId` (string)
- `email` (string)
- `id` (string)
- `metadata` (object)
- `name` (string)
- `notifications` (array)
- `participantType` (string)
- `phone` (string)
- `registeredAt` (string)
- `roleType` (string)
- `sequence` (number)
- `signatureStatus` (string)
- `signatures` (array)
- `surnames` (string)
- `taxId` (string)
- `uniqueValidator` (boolean)
- `validators` (array)

### `add_validator_to_signatory` (~163 tokens)

Adds a validator to a document's signatory: a person who must approve (validate) that signatory's identity or the document before the signature can proceed. Add validators BEFORE activate_signature_request. Requires: add_document_to_signature_request → documentId, add_signatory_to_document → signatoryId. The signature_request_full composite accepts validators inline.

Input parameters:

- `documentId` (string, required): MANDATORY. UUID of the document within the signature request. Obtain from add_document_to_signature_request.
- `email` (string, required)
- `name` (string, required)
- `phone` (string)
- `signatoryId` (string, required): MANDATORY. UUID of the signatory. Obtain from add_signatory_to_document.
- `surnames` (string)

Output parameters:

- `documentId` (string)
- `email` (string)
- `id` (string)
- `name` (string)
- `phone` (string)
- `signatoryId` (string)
- `surnames` (string)

### `add_observer_to_document` (~138 tokens)

Adds an observer to a signature request's document: a person who receives read-only visibility of the process and the signed result without signing. Add observers BEFORE activate_signature_request. Requires: create_signature_request → signatureRequestId, add_document_to_signature_request → documentId.

Input parameters:

- `documentId` (string, required): MANDATORY. UUID of the document within the signature request. Obtain from add_document_to_signature_request.
- `email` (string, required)
- `name` (string, required)
- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.
- `surnames` (string)

Output parameters:

- `email` (string)
- `id` (string)
- `name` (string)
- `notifications` (array)
- `surnames` (string)

### `activate_signature_request` (~146 tokens)

Activates a signature request, sending signing notifications to every added signatory — after this, no more documents or signatories can be added (use add_validator_to_signatory / add_observer_to_document before activating if you need those roles). Requires: create_signature_request → signatureRequestId, at least one document (add_document_to_signature_request) with its bytes uploaded, and at least one signatory per document (add_signatory_to_document). Prefer signature_request_full for a new request — it creates, adds documents+signatories, and activates in one call.

Input parameters:

- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

Output parameters:

- `id` (string)
- `status` (string)

### `get_signature_request` (~67 tokens)

Retrieves a signature request's details and status by id (legacy top-level name). Use to check signing progress after activation. Requires: create_signature_request → signatureRequestId.

Input parameters:

- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

Output parameters:

- `cancellationReason` (string)
- `closeConfig` (object)
- `createdAt` (string)
- `createdBy` (string)
- `description` (string)
- `documents` (array)
- `id` (string)
- `language` (string)
- `name` (string)
- `notifications` (boolean)
- `provider` (string)
- `senderAddress` (string)
- `senderName` (string)
- `signatureRequestBody` (array)
- `status` (string)
- `statusHistory` (array)
- `uniqueValidator` (boolean)
- `webhookUris` (array)

### `signature_request_list` (~187 tokens)

List signature requests, optionally filtered by close condition among other criteria. Use to find a request when you don't have its id (e.g. by name or status). Signature-request close condition: ALL_REQUIRED = The request only closes once EVERY signatory has signed. | PARTIAL_ALLOWED = The request can close once the minimum required signatories have signed, even if others haven't yet.

Input parameters:

- `cancellationReasons`
- `closeAtFrom`
- `closeAtTo`
- `closeCondition`
- `creators`
- `dateFrom`
- `dateTo`
- `emailObservers`
- `emailSignatories`
- `hashes`
- `ids`
- `names`
- `page`
- `providers`
- `signatureTypes`
- `size`
- `sort`
- `statuses`

Output parameters:

- `_metadata` (object)
- `records` (array)

### `signature_request_cancel` (~74 tokens)

Cancels an active signature request — no further signing can occur. Use when a request was activated in error or is no longer needed. Requires: create_signature_request → signatureRequestId. Cannot be undone.

Input parameters:

- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

Output parameters:

- `id` (string)
- `status` (string)

### `signature_certificate_generate` (~99 tokens)

Generates the well-signed appearance certificate document for a signature request. Use once every signatory has signed (check with get_signature_request). Requires: create_signature_request → signatureRequestId. Unlike EAD Enterprise's equivalent tool (a GET that polls an already-generated URL), this triggers generation and returns the result in the same call.

Input parameters:

- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

Output parameters:

- `data` (object)

### `signature_coordinate_set` (~167 tokens)

Sets the on-page (x, y, page) coordinates where a signatory's signature appears on a document. Use after add_signatory_to_document if the signature placement needs to be explicit rather than auto-positioned. Requires: create_signature_request → signatureRequestId, add_document_to_signature_request → documentId, add_signatory_to_document → signatoryId.

Input parameters:

- `coordinates` (array)
- `documentId` (string, required): MANDATORY. UUID of the document within the signature request. Obtain from add_document_to_signature_request.
- `signatoryId` (string, required): MANDATORY. UUID of the signatory. Obtain from add_signatory_to_document.
- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

### `signature_document_download_url_get` (~147 tokens)

Retrieves the download link for the FINAL, well-signed version of a document — the actual signed file, once every signatory has signed. Requires: create_signature_request → signatureRequestId, add_document_to_signature_request → documentId. Use get_signature_request first to confirm signing is complete before calling this. Not to be confused with signature_certificate_generate, which produces a separate appearance certificate document, not the signed document itself.

Input parameters:

- `documentId` (string, required): MANDATORY. UUID of the document within the signature request. Obtain from add_document_to_signature_request.
- `signatureRequestId` (string, required): MANDATORY. UUID of the signature request. Obtain from create_signature_request.

Output parameters:

- `expiration` (string)
- `url` (string)

### `notification_request_create` (~160 tokens)

Creates a new notification request (draft) — the top-level container for receivers and attachments in a certified-notification flow. Use this first, before any other Notification-manager tool. No prerequisites. Set `autosend: true` to also send immediately on activation of the first receiver batch, or leave it false to add receivers/documents over several calls before calling notification_request_send yourself. Returns requestId and one notificationId per receiver already on the request (if any were included inline).

Input parameters:

- `autosend` (boolean)
- `content` (string)
- `data` (object)
- `language` (string, required)
- `metadata` (object)
- `requestId` (string): UUID of the notification request. Obtain from notification_request_create.

Output parameters:

- `notificationIds` (array)
- `requestId` (string)
- `uploadLinks` (array)

### `notification_request_send` (~196 tokens)

Activates a notification request, triggering delivery to every added receiver across their configured channels (email/SMS/Noticeman/WhatsApp/RCS). Runs as an MCP Task (bounded-polling until every receiver's notification leaves its in-flight state — EAD Factory's upstream emits no events for this transition). Requires: notification_request_create -> requestId, at least one receiver added via notification_receiver_add. On completion, returns each notification's id and final delivery state (per-receiver failures are reported in the result, not treated as a Task failure). REQUIRES an MCP client with Tasks support — from a client without it this call fails; in that case create the request with autosend: true (notification_request_create) and poll notification_request_status yourself. Use notification_request_status to check progress without waiting.

Input parameters:

- `requestId` (string, required): MANDATORY. UUID of the notification request. Obtain from notification_request_create.

### `notification_request_status` (~135 tokens)

Searches notifications, optionally filtered by requestId and/or delivery state — the closest equivalent to "checking a request's status": a request fans out into one notification per receiver, each with its own state history, so this returns every notification matching the filter with its current state. Omit requestId to search across every request. Requires: notification_request_create → requestId (if filtering to one request).

Input parameters:

- `filters`
- `ids`
- `page`
- `requestId`: UUID of the notification request. Obtain from notification_request_create.
- `size`
- `sort`
- `states`

Output parameters:

- `data`

### `notification_receiver_add` (~266 tokens)

Adds one or more receivers to a draft notification request — each receiver becomes its own per-channel notification under the shared requestId (there is no separate receiverId; track receivers by the notificationIds this call returns). Use once per batch of receivers before calling notification_request_send. Requires: notification_request_create → requestId. Each receiver's shape depends on its `provider` (SMTP/SMS/NOTICEMAN/WFB) — see the schema for the fields each variant needs. Notification delivery provider: SMTP = Email delivery. | SMS = SMS text message delivery. | NOTICEMAN = EAD Factory's own certified notification channel (qualified electronic delivery). | NOTICEMAN_AND_WHATSAPP = Certified channel plus a WhatsApp copy. | NOTICEMAN_AND_WHATSAPP_AND_RCS = Certified channel plus WhatsApp and RCS copies. | NOTICEMAN_AND_RCS = Certified channel plus an RCS (Rich Communication Services) copy. | WFB = WhatsApp Business messaging, uncertified (no Noticeman qualified channel). | RCS = RCS (Rich Communication Services) messaging only, uncertified.

Input parameters:

- `receivers` (array, required)
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

Output parameters:

- `notificationIds` (array)
- `requestId` (string)

### `notification_document_add` (~104 tokens)

Registers one or more document attachments (metadata only — fileName + SHA-256 hash) on a draft notification request. Use once per batch of documents before activating. Requires: notification_request_create → requestId. This only registers metadata; call notification_document_upload_url_create for each registered attachment to get a URL to PUT the actual file bytes to.

Input parameters:

- `attachments` (array, required)
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

Output parameters:

- `notificationIds` (array)
- `requestId` (string)
- `uploadLinks` (array)

### `notification_document_upload_url_create` (~102 tokens)

Creates a presigned upload URL for a document attachment already registered via notification_document_add — PUT the file bytes to the returned URL. Requires: notification_request_create → requestId, notification_document_add → attachmentId.

Input parameters:

- `attachmentId` (string, required): MANDATORY. UUID of the attachment. Obtain from notification_document_add.
- `fileSize` (integer)
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

Output parameters:

- `expiration` (string)
- `url` (string)

### `notification_document_download_url_create` (~83 tokens)

Creates a presigned download URL for a document attachment on a notification request. Requires: notification_request_create → requestId, notification_document_add → attachmentId.

Input parameters:

- `attachmentId` (string, required): MANDATORY. UUID of the attachment. Obtain from notification_document_add.
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.

### `notification_certificate_generate` (~160 tokens)

Generates a delivery-certificate report for one or more notifications on a request. Use once notification_request_status shows the relevant notifications have left their in-flight state. Requires: notification_request_create → requestId, notification_request_status → notificationIds. Returns a reportId — call notification_certificate_pdf_url_get with it to get the actual download URL (2-step, same shape as Evidence's report tools).

Input parameters:

- `additionalData`
- `embedAttachmentsEnabled` (boolean)
- `languageCode` (string, required)
- `notificationIds` (array, required)
- `reportId` (string): MANDATORY. UUID of the report.
- `requestId` (string, required): UUID of the notification request. Obtain from notification_request_create.
- `template` (string, required)

Output parameters:

- `additionalData`
- `languageCode` (string)
- `notificationIds` (array)
- `reportId` (string)
- `requestId` (string)
- `template` (string)

### `notification_certificate_pdf_url_get` (~48 tokens)

Retrieves the download URL for a previously generated notification delivery certificate. Requires: notification_certificate_generate → reportId.

Input parameters:

- `reportId` (string, required): MANDATORY. UUID of the report.

Output parameters:

- `data`

### `evidence_create_sealed` (~334 tokens)

Creates (or reuses) an evidence group, registers and uploads one or more files as evidence, then seals (closes) the group — the full flagship evidence flow in one call instead of evidence_group_create + N x (evidence_group_evidence_register + upload) + evidence_group_close. Bounded-polls until the group reaches CLOSED (EAD Factory's upstream emits no events for this transition): task-aware MCP clients get an asynchronous Task; any other client simply receives the final result synchronously. Requires: case_file_create -> caseFileId. Provide `evidenceGroupId` to add to an existing OPEN group instead of creating one. Each evidence's file uses the shared FileInput contract (local path, base64, https URL, or n8n binary item) — never a bespoke file field. On success returns the group id, its final CLOSED status, and each evidence's id + sha256. Use the atomic evidence_group_create / evidence_group_evidence_register / evidence_group_close tools instead when you need to inspect or react to each intermediate step.

Input parameters:

- `caseFileId` (string, required): MANDATORY. UUID of the parent case file.
- `evidenceGroupId` (string): Existing OPEN evidence group to add to. Omit to create a new one.
- `evidences` (array, required): One or more files to register and upload into the group, then seal it.
- `groupName` (string): Only used when creating a new group (evidenceGroupId omitted).
- `groupType` (string): Only used when creating a new group (evidenceGroupId omitted).

### `signature_request_full` (~259 tokens)

Creates a signature request, adds one or more documents (each with its own signatories), and activates it — the full flagship signature flow in one call instead of create_signature_request + N x (add_document_to_signature_request + add_signatory_to_document) + activate_signature_request. Each document's file uses the shared FileInput contract (local path, base64, https URL, or n8n binary item) — never a bespoke file field. Set `activate: false` to leave the request in draft so you can add validators/observers (add_validator_to_signatory, add_observer_to_document) before activating it yourself. On success returns the request id, each document's id, and each signatory's id. Use the atomic tools instead when you need to inspect or react to each intermediate step, or need validators/observers before activation.

Input parameters:

- `activate` (boolean): Activate the request immediately after adding all documents/signatories.
- `createdBy` (string, required): MANDATORY. Identifier of the requester.
- `description` (string)
- `documents` (array, required): One or more documents, each with its own signatories, added to the request.
- `name` (string, required): MANDATORY. Signature request name.

### `ead_factory_help` (~74 tokens)

Returns an overview of EAD Factory's managers (Evidence, Signature, Notification, Chat), their key tools and starting points, and guidance on when to use a composite workflow tool (e.g. evidence_create_sealed) versus the atomic tools. Call this first if you're unsure which tool to use — no credentials needed.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 65
- 2026-08-01: 38
- 2026-07-31: 24
- 2026-07-29: 42
- 2026-07-28: 42
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/@g-digital/mcp-ead-factory
- Socket report: https://socket.dev/npm/package/@g-digital/mcp-ead-factory
- Repository: https://github.com/g-digital-by-Garrigues/EAD-Factory-MCP
- Changelog RSS feed: https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory/changelog.json
- HTML version of this page: https://verifymcp.io/servers/g-digital-by-garrigues-ead-factory/g-digital-mcp-ead-factory
