FreeSign — Free e-signature
Free e-signature for humans and AI agents — zero-document PDF signing from hashes only.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"signing": {
"url": "https://free-sign.com/mcp"
}
}
}원격 엔드포인트
https://free-sign.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (5)
🟡create_signing_envelope(document_sha256)
Create a FreeSign envelope from a PDF SHA-256 hash. Do not send PDF bytes. The created envelope is NOT yet session-bound — the browser that opens the returned signing_url generates an ECDSA P-256 keypair locally and POSTs the public JWK to /api/envelopes/{id}/session-bind before any protected request will succeed. AI agents calling this tool just hand the signing_url to a human, who continues in a browser.
입력 스키마
{
"type": "object",
"properties": {
"document_sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "SHA-256 of the original PDF bytes, computed locally by the user or agent."
}
},
"required": [
"document_sha256"
]
}출력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string"
},
"signing_url": {
"type": "string"
},
"expires_at": {
"type": "string"
},
"session_binding_required": {
"type": "boolean",
"description": "True when the envelope still needs the browser to call /api/envelopes/{id}/session-bind. Always true for MCP-created envelopes."
}
},
"required": [
"envelope_id",
"signing_url",
"expires_at"
]
}🟢verify_document_hash(document_sha256)
Find FreeSign receipts matching a local document SHA-256 hash.
입력 스키마
{
"type": "object",
"properties": {
"document_sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"document_sha256"
]
}출력 스키마
{
"type": "object",
"properties": {
"matches": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"matches"
]
}🟢get_receipt(envelope_id)
Return the envelope record (including final_pdf_sha256, final_signature_base64url, final_payload_json), per-signer signing receipts, and OpenTimestamps anchor metadata. Evidence only, never PDF bytes.
입력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string"
}
},
"required": [
"envelope_id"
]
}출력 스키마
{
"type": "object",
"properties": {
"envelope": {
"type": "object"
},
"receipts": {
"type": "array",
"items": {
"type": "object"
}
},
"ots_anchors": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"envelope",
"receipts",
"ots_anchors"
]
}🟡get_ots_proof(envelope_id, anchor_id)
Return the .ots proof (base64) for a given OpenTimestamps anchor on an envelope. Use the official `ots-cli` to verify offline against Bitcoin block headers. Each seal has two anchors: `kind: "byterange"` commits to the signed document, `kind: "signed_attrs"` commits to SHA-256 of the CMS SignedAttributes (which carry the post-quantum key commitment).
입력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string",
"pattern": "^env_[a-f0-9]{32}$"
},
"anchor_id": {
"type": "string",
"pattern": "^ots_[a-f0-9]{32}$"
}
},
"required": [
"envelope_id",
"anchor_id"
]
}출력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string"
},
"anchor_id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"confirmed"
]
},
"kind": {
"type": "string",
"enum": [
"byterange",
"signed_attrs"
]
},
"anchored_hash": {
"type": "string"
},
"proof_base64": {
"type": "string",
"description": "Complete .ots file bytes, base64."
},
"calendar_urls": {
"type": "array",
"items": {
"type": "string"
}
},
"btc_block_height": {
"type": [
"integer",
"null"
]
},
"btc_block_hash": {
"type": [
"string",
"null"
]
}
},
"required": [
"envelope_id",
"anchor_id",
"status",
"anchored_hash",
"proof_base64"
]
}⚪verify_audit_chain(envelope_id)
Return an envelope's append-only audit-event hash chain together with a server-computed integrity verdict: every event_hash is recomputed from its canonical material, and the prev_event_hash linkage and per-envelope seq contiguity are checked. Evidence only, never PDF bytes. The raw events are included verbatim so the caller can independently re-derive the verdict instead of trusting `chain.valid`.
입력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string",
"pattern": "^env_[a-f0-9]{32}$"
}
},
"required": [
"envelope_id"
]
}출력 스키마
{
"type": "object",
"properties": {
"envelope_id": {
"type": "string"
},
"attested_audit_chain_head_hash": {
"type": [
"string",
"null"
],
"description": "The audit-chain head derived from the signer-signed v2 final payload (G-01), fed into the verdict's head cross-check. NULL until the envelope is finalized."
},
"attested_head_signature_verified": {
"type": "boolean",
"description": "True when the final-payload signature carrying the attested head was re-verified against the signer's on-file public key. False when not finalized or the signature did not verify."
},
"chain": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"event_count": {
"type": "integer"
},
"broken_at": {
"type": [
"integer",
"null"
],
"description": "seq of the first broken event, or null (also null for a head_mismatch — no single event is at fault)."
},
"reason": {
"type": [
"string",
"null"
],
"enum": [
"hash_mismatch",
"broken_link",
"seq_bad_start",
"seq_gap",
"seq_duplicate",
"head_mismatch",
null
]
},
"head_checked": {
"type": "boolean",
"description": "True when an attested head was supplied and cross-checked against the recomputed chain."
},
"head_match": {
"type": [
"boolean",
"null"
],
"description": "Result of the head cross-check, or null when no attested head was available."
},
"events": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"valid",
"event_count",
"broken_at",
"reason",
"head_checked",
"head_match",
"events"
]
},
"events": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"envelope_id",
"attested_audit_chain_head_hash",
"attested_head_signature_verified",
"chain",
"events"
]
}커뮤니티
증거