VOOZH about

URL: https://hub.docker.com/r/gdigital/ead-factory

⇱ gdigital/ead-factory - Docker Image


gdigital/ead-factory

By gdigital

Updated 16 days ago

EAD Factory MCP — Digital Trust services APIs for your agents

Buildkit cache
Image
Security
Developer tools
Databases & storage
0

773

gdigital/ead-factory repository overview

EAD Factory MCP

👁 npm version
👁 npm downloads
👁 license
👁 provenance
👁 smithery badge

EAD Factory MCP — Digital Trust services APIs for your agents.

This MCP server bridges any MCP-compatible agent (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, VS Code, JetBrains, Zed) to EADTrust's Digital Trust services: Evidence Manager (qualified digital evidence + timestamping) and Signature Manager (electronic signature workflows).

Quick start

npx -y @g-digital/mcp-ead-factory

You will need Okta credentials (OKTA_CLIENT_ID + OKTA_CLIENT_SECRET) and at least the Evidence Manager + Signature Manager base URLs for the environment you target (see Environment URLs).

Where to install

This MCP is published to every major MCP distribution channel by the g-digital MCP distribution pipeline. Pick whichever fits your stack:

ChannelInstall command / URL
npmnpx -y @g-digital/mcp-ead-factorynpmjs.com/package/@g-digital/mcp-ead-factory
Docker Hubdocker pull gdigital/ead-factory:latesthub.docker.com/r/gdigital/ead-factory
MCP Official RegistryAuto-discovered as io.github.g-digital-by-Garrigues/ead-factory by any client that reads the registry — registry.modelcontextprotocol.io
n8n community nodeIn n8n Settings → Community Nodes → install @g-digital/n8n-nodes-ead-factory (works with the AI Agent node via usableAsTool) — npmjs.com/package/@g-digital/n8n-nodes-ead-factory
Smitherysmithery mcp install g-digital/ead-factory (from v1.0.7) — smithery.ai/servers/g-digital/ead-factory

Every channel ships the same MCP server contract; the tools and env-var configuration below apply regardless of which install path you choose.

Tools

Evidence Manager
ToolDescription
generate_evidenceFull workflow: authenticate → SHA-256 hash → register evidence → upload file to S3 → poll until COMPLETED/ERROR
get_evidenceRetrieve full evidence details by ID (status, timestamps, custody, metadata)
Signature Manager
ToolDescription
create_signature_requestCreates a new signature request (DRAFT). Supports fullFlow=true to complete the entire flow in one call using preconfigured participants
add_document_to_signature_requestAdds a document to a DRAFT signature request and uploads the file to S3
add_signatory_to_documentAdds a signatory to a document within a signature request
add_validator_to_signatoryAdds a validator to a signatory (must approve before the signatory can sign)
add_observer_to_documentAdds an observer to a document (receives notifications but does not sign)
activate_signature_requestActivates a signature request (DRAFT → ACTIVE), triggering notifications to signatories
get_signature_requestRetrieves full details of a signature request by ID (status, documents, participants, history)

Register the MCP in your client

Claude Desktop
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
Claude Code (CLI)
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
Cursor
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
Windsurf
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
Cline
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
VS Code
{
 "servers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
JetBrains
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}
Zed
{
 "mcpServers": {
 "ead-factory": {
 "args": [
 "-y",
 "@g-digital/mcp-ead-factory"
 ],
 "command": "npx",
 "env": {
 "API_BASE_URL": "",
 "FULL_FLOW_EMAIL_BASE": "",
 "FULL_FLOW_FILE_PATH": "",
 "HTTP_PORT": "",
 "OKTA_CLIENT_ID": "",
 "OKTA_CLIENT_SECRET": "<PASTE_OKTA_CLIENT_SECRET_HERE>",
 "OKTA_SCOPE": "",
 "OKTA_TOKEN_URL": "",
 "POLL_INTERVAL_MS": "",
 "POLL_MAX_ATTEMPTS": "",
 "SIGNATURE_API_BASE_URL": "",
 "TRANSPORT": ""
 }
 }
 }
}

Configuration

NameRequiredSecretDescription
API_BASE_URLYesNoEvidence Manager API base URL
FULL_FLOW_EMAIL_BASEYesNoFull flow base email — used to compose participant emails (user+signatory@domain, etc.)
FULL_FLOW_FILE_PATHYesNoFull flow default file path
HTTP_PORTYesNoHTTP_PORT
OKTA_CLIENT_IDYesNoOKTA_CLIENT_ID
OKTA_CLIENT_SECRETYesYesOKTA_CLIENT_SECRET (See https://eadtrust.example.com/onboarding for credential acquisition.)
OKTA_SCOPEYesNoOKTA_SCOPE
OKTA_TOKEN_URLYesNoOAuth credentials (Okta client_credentials flow) Used both for calling Evidence Manager API and for verifying incoming Bearer tokens (HTTP mode)
POLL_INTERVAL_MSYesNoPolling configuration for evidence status
POLL_MAX_ATTEMPTSYesNoPOLL_MAX_ATTEMPTS
SIGNATURE_API_BASE_URLYesNoSignature Manager API base URL
TRANSPORTYesNoTransport: "stdio" for local Claude Code, "http" for remote deployment with auth
Environment URLs
AWS
EnvironmentAPI_BASE_URLOKTA_TOKEN_URL
INThttps://api.int.gcloudfactory.com/digital-trusthttps://legalappfactory.okta.com/oauth2/aus5zlw4kr0vhHKyx417/v1/token
PREhttps://api.pre.gcloudfactory.com/digital-trusthttps://sso.garrigues.io.builders/oauth2/aus653dgdgTFL2mhw417/v1/token
PROhttps://api.gcloudfactory.com/digital-trusthttps://legalappfactory.okta.com/oauth2/aus657e2pcoS6hOS6417/v1/token
OCI
EnvironmentAPI_BASE_URL
INThttps://api.int.eadtrust.gcloudfactory.com/digital-trust
PROhttps://api.eadtrust.gcloudfactory.com/digital-trust

Remote deployment (HTTP + Bearer auth)

Set TRANSPORT=http to run the server as an HTTP service. The /mcp endpoint requires a valid Okta Bearer token (verified against the introspection endpoint derived from OKTA_TOKEN_URL). The /health endpoint is unauthenticated for monitoring.

Architecture

Client (Claude Code / MCP client)
 │
 ├─ stdio ──► McpServer
 │
 └─ HTTP ──► Express + Bearer auth (Okta introspect) ──► StreamableHTTP ──► McpServer
 │
 tools/call
 │
 ▼
 workflow.service
 ├── auth.service (Okta client_credentials → token cache)
 ├── hash.service (SHA-256 from local file)
 ├── evidence.service (POST /api/v1/private/evidences)
 └── s3-upload.service (PUT presigned URL + retry)

generate_evidence — Input schema

FieldTypeRequiredDescription
filePathstringYesAbsolute path to the file on disk
evidenceIdstring (UUID)YesUnique ID for idempotency
titlestringYesHuman-readable title
createdBystringYesCreator name (max 50 chars)
capturedAtstring (ISO 8601)YesCapture datetime
custodyTypeINTERNAL | EXTERNALNoDefaults to INTERNAL
testimonyTSPbooleanNoTSP via EADTrust (default true)
testimonyDLTbooleanNoDLT via Lacnet (requires tenant activation)
requiredTestimonyProvidersstringNoComma-separated: "TSP", "DLT", "TSP,DLT"
metadatastring (JSON)NoCustom key-value pairs as a JSON string

API endpoints consumed

  • POST {OKTA_TOKEN_URL} — OAuth client_credentials token
  • POST {API_BASE_URL}/api/v1/private/evidences — register evidence
  • GET {API_BASE_URL}/api/v1/private/evidences/{id} — fetch evidence
  • PUT <presigned-s3-url> — upload file binary

License

MIT

Tag summary

latest

Content type

Image

Digest

sha256:b8f249f85…

Size

64.5 MB

Last updated

16 days ago

docker pull gdigital/ead-factory