mcp-server
MCP Server for the Assinafy digital signature API. A digital signature platform for Brazil.
Install / Use
claude mcp add assinafy -- npx -y github:assinafy/mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Content & MediaSupported Platforms
Our assessment of mcp-server
mcp-server scores 80/100 on our quality scale, 118th of 250 Content & Media skills we index (top 48%).
Its MCP Server is 33 KB long, well organised into 57 sections with 36 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 2 days ago, so mcp-server is actively maintained.
- Our last check on 2026-09-16 found the source still online.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the first 100 KB of the file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-25. Automated pattern scan on 2026-09-25. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
mcp-server compared with similar skills
All 4 of these similar skills score higher than mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| mcp-server (this skill)by assinafy | 80 | 3 | 2d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 85.3k | 9d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 73.7k | today | CLAUDE.md |
| rufloby ruvnet | 100 | 73.2k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.1k | today | CLAUDE.md |
Frequently asked questions
- How do I install mcp-server?
- Run
claude mcp add assinafy -- npx -y github:assinafy/mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is mcp-server safe to use?
- Our scan of the first 100 KB of the file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is MIT-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is mcp-server still maintained?
- The repository was last updated 2 days ago, so mcp-server is actively maintained.
Skill content
View source on GitHubAssinafy MCP — Client Reference
A hosted Model Context Protocol Streamable HTTP server for system-to-system
integrations with the Assinafy electronic-signature
platform. The MCP server is a thin, multi-tenant proxy in front of the public
Assinafy REST API (https://api.assinafy.com.br/v1). Every request carries the
caller's API key and account ID; no per-tenant state is stored on the MCP
server itself.
- Endpoint:
https://mcp.assinafy.com.br/mcp - Transport: MCP Streamable HTTP (stateless)
- Protocol version:
2025-11-25 - Auth: per-request HTTPS headers (or per-call
_meta/arguments.auth)
Endpoint methods
The /mcp endpoint accepts two HTTP methods:
| Method | Purpose |
|---|---|
| GET /mcp | Returns a small JSON manifest: server name, version, MCP protocol version, transport, statelessness, and the full list of registered tools (name, title, description, annotations). Useful for capability discovery, browser smoke tests, and uptime probes. |
| POST /mcp | The JSON-RPC entry point for all MCP operations (initialize, tools/list, tools/call, etc.). |
GET /mcp sample:
curl -sS https://mcp.assinafy.com.br/mcp
{
"name": "assinafy-mcp-server",
"version": "0.1.0",
"protocol": "2025-11-25",
"transport": "streamable-http",
"stateless": true,
"status": "ok",
"tools": [
{
"name": "assinafy_list_documents",
"title": "List Documents",
"description": "List documents in an Assinafy workspace with optional pagination and search.",
"annotations": { "readOnlyHint": true, "openWorldHint": true, "title": "List Documents" }
}
// ... 39 more
]
}
The server runs in stateless mode: there is no initialize handshake to
persist, no Mcp-Session-Id to track, and GET /mcp does not open an SSE
stream — clients fire each tools/call as a self-contained POST with the
required headers.
Required headers
Every POST must include the following headers:
| Header | Required | Notes |
|---|---|---|
| Content-Type: application/json | yes | JSON-RPC 2.0 payload. |
| Accept: application/json, text/event-stream | yes | MCP returns each response as a single SSE message event over text/event-stream. |
| MCP-Protocol-Version: 2025-11-25 | yes | Required by the MCP spec on every request to a Streamable HTTP server. |
| X-Api-Key | yes | Your Assinafy API key. Matches the official Assinafy REST API auth header. |
| X-Assinafy-Account-Id | yes | Your workspace (account) ID. |
| X-Assinafy-Webhook-Secret | conditional | Only required for assinafy_verify_webhook_signature, and only when secret is not passed inline as a tool argument. |
Bearer-token authentication is not supported.
The public mcp.assinafy.com.br host sits behind Cloudflare; clients without
a recognisable User-Agent header may be challenged. Standard SDKs and curl
send one by default — urllib-style minimal clients should set one explicitly.
Per-call credentials (no HTTP headers)
Clients that cannot attach custom headers (most browser embeds, some hosted
chat platforms) can supply the same three credentials per tools/call. The
server checks, in order: HTTP headers → _meta → arguments.auth →
arguments.assinafy → arguments.credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "assinafy_list_documents",
"_meta": {
"api_key": "<ASSINAFY_API_KEY>",
"account_id": "<ASSINAFY_ACCOUNT_ID>"
},
"arguments": {}
}
}
Recognised keys (snake_case or camelCase): api_key / apiKey / x_api_key,
account_id / accountId, webhook_secret / webhookSecret. Any tool that
accepts an explicit account_id argument uses that value over the
header/_meta value for the single call.
Calling tools
Every operation flows through standard JSON-RPC tools/call. The HTTP
response body is one SSE frame containing the JSON-RPC result.
curl -sS -X POST https://mcp.assinafy.com.br/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-H "X-Api-Key: $ASSINAFY_API_KEY" \
-H "X-Assinafy-Account-Id: $ASSINAFY_ACCOUNT_ID" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "assinafy_list_documents",
"arguments": { "page": 1, "per_page": 20 }
}
}'
Raw response:
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"<JSON>"}],"structuredContent":{...}}}
For object-returning tools the result has both:
result.content[0].text— the JSON payload as a string.result.structuredContent— the same payload as a JSON object.
For tools that return a bare array (e.g. assinafy_get_document_activities)
the MCP SDK only populates result.content[0].text; clients should parse it
with JSON.parse when they need the array. Plain-text results
(delete confirmations, etc.) are returned only as content[0].text.
Failed tool calls return result.isError: true with a human-readable message
in result.content[0].text:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"isError": true,
"content": [{ "type": "text", "text": "API error 400: ..." }]
}
}
The example payloads in the per-tool reference below show the
structuredContent object (or content[0].text for plain-text / array
results). The wrapping envelope is omitted for brevity.
Important: file upload requires server-side filesystem access
assinafy_upload_document reads the PDF directly from the MCP server's
local filesystem using the supplied file_path. This works for self-hosted
deployments (you control the path), but on the public hosted endpoint at
https://mcp.assinafy.com.br/mcp a remote client cannot place a file where
the server can read it.
Public hosted clients have two options:
- Upload via the Assinafy REST API directly (
POST /v1/accounts/{account_id}/documents) and then use the MCP tools (assinafy_get_document,assinafy_create_assignment, …) to drive the rest of the workflow. - Self-host this MCP server alongside whatever ingestion pipeline produces the PDF, so the server-side filesystem path is meaningful.
Every other tool works end-to-end against the public endpoint.
Document lifecycle quick reference
| Status | Meaning |
|---|---|
| uploading | File still being received. |
| uploaded | File received, awaiting metadata extraction. |
| metadata_processing | Backend extracting fields/pages. |
| metadata_ready | Ready for signing setup. |
| pending_signature | Assignment created; waiting on signers. |
| expired | Assignment expired without completion. |
| certificating | Final signing artifact is being generated. |
| certificated | Fully signed; signed PDF + certificate page available. |
| rejected_by_signer | A signer rejected the document. |
| rejected_by_user | The sender cancelled the request. |
| failed | Processing failed. |
assinafy_wait_document_ready returns when the document reaches any of
metadata_ready, pending_signature, or certificated.
Tool reference
All 40 tools, organized by resource. Each entry lists arguments (verified
against the input schema in tools/*.go) and the response shape observed
against the live REST API. Where the underlying API enum is case-sensitive
this is called out — Assinafy's API rejects "email" and accepts "Email".
Documents
assinafy_upload_document
Upload a PDF (max 25 MB) by server-side filesystem path. See the upload note above; only practical for self-hosted MCP deployments.
| Argument | Type | Required | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path on the MCP server's filesystem. |
| account_id | string | no | Override the account ID for this call. |
| metadata | object | no | Arbitrary JSON metadata to attach to the document. |
Response (structuredContent):
{
"resource": "document",
"id": "2222bbbb2222bbbb2222bbbb2222",
"account_id": "aaaa0000aaaa0000aaaa0000",
"name": "sample_contract.pdf",
"status": "uploaded",
"artifacts": {
"original": "https://api.assinafy.com.br/v1/documents/2222bbbb2222bbbb2222bbbb2222/download/original"
},
"pages": [],
"created_at": "2026-05-11T23:25:38Z",
"updated_at": "2026-05-11T23:25:38Z",
"is_closed": false
}
Immediately after upload, status is usually uploaded or
metadata_processing and pages is empty. Call assinafy_wait_document_ready
to block until the backend finishes extracting page metadata.
assinafy_list_documents
| Argument | Type | Required | Description |
|---|---|---|---|
| page | int | no | 1-based page number. |
| per_page | int | no | Results per page (max 100). |
| search | string | no | Filter by document name. |
| sort | string | no | Sort field; prefix - for descending (e.g. -created_at). |
| account_id | string | no | Override account ID. |
Response:
{
"data": [
{
"id": "1111aaaa1111aaaa1111aaaa111",
"account_id": "aaaa0000aaaa0000aaaa0000",
"name": "Sample Agreement.pdf",
"status": "certificated",
"is_closed": true,
"created_at": "2025-03-13T14:24:20Z",
"updated_at": "2025-03-13T14:26:51Z"
}
],
"meta": { "current_page": 1, "last_page": 2, "per_page": 3, "total": 4 }
}
assinafy_get_document
| Argument | Type | Required |
|---|---|---|
| document_id | string | yes |
Response (abridged — assignment.items is included when an assignment exists
and contains the full field-placement data the signing UI uses):
{
"resource": "document",
"id": "1111aaaa1111aaaa1111aaaa111",
"account_id": "aaaa0000aaaa0000aaaa0000",
"name": "Sample Agreement.pdf",
"status": "certificated",
"is_closed": true,
"signing_url": "https://app.assinafy.com.br/sign/1111aaaa1111aaaa1111aaaa111",
"artifacts": {
"original": "https://api.assinafy.com.br/v1/documents/.../download/original",
"thumbnail": "https://api.assinafy.com.br/v1/documents/.../thumbnail",
"certificated": "https://api.assinafy.com.br/v1/documents/.../download/certificated",
"certificate-page": "https://api.assinafy.com.br/v1/documents/.../download/certificate-page",
"bundle": "https://api.assinafy.com.br/v1/documents/.../download/bundle"
},
"assignment": {
"id": "3333cccc3333cccc3333cccc333",
"sender_email": "sender@example.com",
"method": "collect",
"expires_at": null,
"message": null,
"signers": [
{ "id": "4444dddd4444dddd4444dddd444", "full_name": "...", "email": "...", "has_accepted_terms": true }
],
"copy_receivers": [],
"items": [ /* per-page field placements with signer + display_settings */ ],
"summary": {
"signer_count": 1,
"completed_count": 1,
"signers": [ { "id": "...", "full_name": "...", "email": "...", "completed": true } ]
},
"signing_urls": [
{ "signer_id": "4444dddd4444dddd4444dddd444", "url": "https://app.assinafy.com.br/sign/...?email=..." }
]
},
"created_at": "2025-03-13T14:24:20Z",
"updated_at": "2025-03-13T14:26:51Z"
}
The assignment.artifacts URLs follow the document's lifecycle: certificated
/ certificate-page / bundle only appear once the document reaches
certificated.
assinafy_delete_document
Deletes the document (and any active assignment) in one call.
| Argument | Type | Required |
|---|---|---|
| document_id | string | yes |
Response (content[0].text):
Document deleted successfully
assinafy_get_document_activities
Chronological event log. Returns a bare JSON array in content[0].text
(no structuredContent).
| Argument | Type | Required | |---|---|---| |
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
85.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
73.7kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ruflo
73.2k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
CowAgent
47.1kOpen-source super AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
