Connect Kamy and your agent gets 59 tools, among them ask_kamy, attest_artifact, bulk_signature_requests. It answers at https://mcp.kamy.dev/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 5 September 2026; the last check, on 18 October 2026, succeeded.
Document API for AI-native software: render PDFs, e-sign, PAdES-seal, and verify.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
ask_kamy | Ask Kamy Brain a question about Kamy usage, templates, plans, or errors. Sends the question to Kamy's public assistant endpoint and returns a paragraph answer. Inputs: question |
attest_artifact | Cryptographically sign an output your agent produced — a PDF, report, code patch, dataset, email — so a third party can later confirm those exact bytes are the ones that were recorded, unmodified. Pass content_text or content_base64 and Kam Inputs: artifact_type, content_sha256, content_base64, content_text, metadata, feature |
bulk_signature_requests | Fan one already-rendered PDF out to up to 100 independent signers in a single call — the 'send this NDA to everyone on the list' path. Each signer gets their own request, their own sign link and their own invitation email, but they all shar Inputs: renderId, signers, message, expiresIn, reminderCadenceHours, position |
convert_document | Convert a file you already hold — .docx, .xlsx or .csv — into a PDF, preserving its existing content. Pass the bytes base64-encoded together with the original filename, which is what the API uses to detect the input type. This is the inboun Inputs: filename, fileBase64, name |
create_envelope | Send a single PDF to 2–10 signers as one envelope. This is the multi-signer counterpart to create_signature_request, which handles exactly one signer — the API rejects an envelope with fewer than two recipients, so pick the tool by signer c Inputs: renderId, pdfUrl, recipients, routing, position, message |
create_schedule | Set up a recurring render: a cron expression, a template, and where each document goes. Use this instead of render_pdf when the user wants a document produced repeatedly on a calendar — a weekly report, a monthly invoice run — so nothing ha Inputs: name, template, schedule, channel, recipients, data |
create_signature_request | Send a previously rendered PDF to a signer for e-signature when a Kamy API key is configured. Without a key, returns dashboard setup instructions. Inputs: renderId, signerEmail, signerName, position, message, authMethod |
create_template | Create a new custom PDF template owned by this account: a name, a unique slug, a Handlebars/HTML body, and optional CSS and JSON Schema. The slug is what render_pdf then takes as `template`. Custom templates are a paid feature — on the Free Inputs: name, slug, html, css, schema, description |
create_webhook | Register an HTTPS endpoint that Kamy POSTs to when work finishes, so a long render or an e-signature does not have to be polled. Use this when the caller owns a server that can receive callbacks; use get_job or list_renders when it cannot. Inputs: url, events, enabled |
delete_schedule | Permanently delete a recurring schedule so it stops firing. There is no undo and no trash — recreate it with create_schedule if it is deleted by mistake, so confirm with the user before calling this on a schedule you did not just create. If Inputs: schedule_id |
edit_pdf | Modify an existing PDF: fill AcroForm fields by name, stamp text at absolute coordinates, or paint opaque boxes over regions. Operations apply in the order given, to either a render you own (renderId) or a PDF Kamy downloads from a public U Inputs: renderId, pdfUrl, operations, name, flattenFields |
extract_document | Extract structured data from a PDF (invoice, receipt, contract, ID document, or any form). Returns the parsed JSON plus a public verify URL that proves the extraction matches the source. Use this when an agent needs to read an inbound docum Inputs: template, source_url, source_base64 |
extract_from_render | Read the text or the form fields back out of a document this account already rendered, without uploading anything. Pass type='text' (the default) for per-page text plus a joined fullText string, or type='fields' for the PDF's AcroForm field Inputs: render_id, type |
get_account | Read everything about the authenticated Kamy account in one call: profile, plan and plan status, the plan's limits (renders per month, API keys, seats, custom templates, overage pricing, priority queue), month-to-date render usage, and whet |
get_envelope | Fetch one multi-signer envelope with every recipient in signing order — each with a live sign_url, status, recipient_order, expires_at and last_reminded_at — plus the envelope's own status and routing. This is the tool for 'who still has no Inputs: envelopeId |
get_job | Poll an asynchronous render job started by render_async. Returns { jobId, status } where status is 'queued', 'processing', 'completed' or 'failed'; on 'completed' the response also carries `render` with the finished document's id, signed UR Inputs: job_id |
get_provenance_chain | Replay everything recorded under one run_id — artifacts from attest_artifact and calls from record_agent_action — in order, with each record's link to its parent hash. Use it to answer 'what did this agent actually do, and in what sequence? Inputs: run_id |
get_render | Fetch one previously produced document by its render id, with a freshly signed download URL valid for the next hour. This is the recovery path for an expired link: the URL is minted at read time, so calling this again on an old render alway Inputs: render_id |
get_render_pages | Rasterise every page of an existing render to a PNG image and return one signed 1-hour URL per page, with pixel width and height. Use this when a page has to be looked at rather than read — thumbnails, previews, visual QA of a layout, or an Inputs: render_id, dpi |
get_signature_certificate | Returns the authenticated download URL for a signature request's Certificate of Completion PDF — the process audit trail (invite → opened → consent → signed, with IP / user-agent) that legal teams expect. Only available after the request re Inputs: signatureRequestId |
get_signature_request | Fetch one signature request by id, with the detail list_signature_requests leaves out: the placed_fields layout, signed_at plus signed_ip and signed_user_agent, last_reminded_at, cc_emails, and envelope_id + recipient_order when it is part Inputs: signatureRequestId |
get_signature_template | Fetch one e-signature preset in full, including the placed_fields array and position that list_signature_templates omits. Use it to inspect or copy an existing field layout before applying it through create_signature_request's signatureTemp Inputs: signatureTemplateId |
get_started | Everything needed to go from nothing to a rendered document in one call: the steps to create an API key in the dashboard, and — when you name a `framework` — the install command for the Kamy SDK, the environment variable it reads, and the c Inputs: framework, packageManager, template |
get_template_schema | Fetch the JSON Schema (exact data shape) and a copy-pasteable sample payload for a Kamy system template by slug. Call this before render_pdf so you fill the right fields with the right types instead of guessing. No authentication required. Inputs: slug |
get_template_version | Fetch one template version snapshot in full — html, css, schema, createdBy, createdAt — exactly as it was frozen when that version was cut. Use list_template_versions first to find the number. Use this to inspect what a released version act Inputs: templateId, version |
get_upload | Look up a stored asset by its upload id: filename, contentType, sizeBytes, status, its `kamy://asset/<id>` reference, and a freshly signed downloadUrl valid for one hour once the bytes exist. Its main use is confirming an out-of-band transf Inputs: uploadId |
list_renders | List the documents this account has already produced, newest first. This is how you find a PDF made earlier — in a previous turn, by a schedule, or by another process — when you no longer hold its URL. Download URLs returned by the render t Inputs: page, page_size |
list_schedules | List this account's recurring render schedules, newest first, with the id needed to delete one. Use it to answer what is already automated before creating a duplicate, and to diagnose a schedule that is not producing documents: each row car Inputs: limit, offset |
list_signature_requests | List signature requests created by the configured Kamy account, newest first. Without a key, returns dashboard setup instructions. Inputs: limit, offset |
list_signature_templates | List this account's reusable e-signature presets — saved field placements, default invite message, default link lifetime and CC list — newest first. These are signing presets, NOT the document catalog: list_templates is what render_pdf draw Inputs: limit, offset |
list_template_versions | List a template's immutable version snapshots, newest first, as { id, version, createdAt }. This is where the version number that publish_template and rollback_template take comes from. Bodies are deliberately not included — call get_templa Inputs: templateId |
list_templates | List Kamy's public system PDF templates. No authentication required. |
list_webhooks | List the webhook endpoints registered on this account, with the id needed to test one. Each row carries url, events, enabled, and lastDeliveryAt / lastStatus from the most recent delivery — lastStatus is the HTTP code the caller's own serve |
merge_pdfs | Concatenate 2–20 existing renders into a single new PDF, in exactly the order the ids are given. Both the inputs and the output are Kamy render ids, so this is the composition step after several render_pdf / convert_document / edit_pdf call Inputs: renderIds, name |
pki_sign_pdf | Cryptographically sign an existing render with PAdES when a Kamy API key is configured. Without a key, returns dashboard setup instructions. Inputs: renderId, reason, location, signerName, signerEmail, withTimestamp |
preview_field_placement | Check a placedFields layout against a real render's page geometry before anything is sent: no signature request is created, no email goes out, and no signature quota is spent. It accepts exactly what create_signature_request accepts — all s Inputs: renderId, placedFields |
publish_template | Make a template version live for rendering. Called with no `version`, it snapshots the current draft into a new version and points published_version at it — this is how you ship an edit made with update_template. Called with an existing `ve Inputs: templateId, version |
record_agent_action | Append one signed tool_call -> tool_result pair to a tamper-evident ledger. Call it after any consequential tool invocation — a payment, an outbound email, a write into a customer system — so there is a hash-chained record of what the agent Inputs: server, tool, tool_call, tool_result, run_id, parent_sha256 |
remind_signature | Resend the signature invitation email. Pass signatureRequestId to nudge one signer, or envelopeId to nudge every currently-pending recipient of an envelope — supply exactly one; there is no separate envelope-reminder tool. This sends real e Inputs: signatureRequestId, envelopeId |
render_async | Queue one PDF render and return immediately with { jobId, status: 'queued' } instead of waiting for the document. Choose this over render_pdf when blocking is not acceptable — a heavy template, a large data set, or a turn where you have oth Inputs: template, data, name, format, margin, metadata |
render_batch, render_docx, render_html, render_pdf, render_pptx, render_xlsx, rollback_template, scan_tool_description, split_pdf, test_webhook, trace_record, trace_record_batch, trace_search, update_template, upload_file, validate_payload, verify_attestation, verify_mcp_server, verify_pdf_signature
Every block below points at https://mcp.kamy.dev/mcp. Pick your client and copy.
claude mcp add --transport http kamy https://mcp.kamy.dev/mcp
{
"mcpServers": {
"kamy": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.kamy.dev/mcp"]
}
}
}{
"mcpServers": {
"kamy": {
"url": "https://mcp.kamy.dev/mcp"
}
}
}{
"servers": {
"kamy": {
"type": "http",
"url": "https://mcp.kamy.dev/mcp"
}
}
}{
"context_servers": {
"kamy": {
"url": "https://mcp.kamy.dev/mcp"
}
}
}{
"mcpServers": {
"kamy": {
"serverUrl": "https://mcp.kamy.dev/mcp"
}
}
}{
"mcpServers": {
"kamy": {
"url": "https://mcp.kamy.dev/mcp"
}
}
}name: Kamy
version: 0.0.1
schema: v1
mcpServers:
- name: Kamy
type: streamable-http
url: https://mcp.kamy.dev/mcp{
"mcpServers": {
"kamy": {
"httpUrl": "https://mcp.kamy.dev/mcp"
}
}
}{
"mcpServers": {
"kamy": {
"type": "http",
"url": "https://mcp.kamy.dev/mcp"
}
}
}{
"mcpServers": {
"kamy": {
"url": "https://mcp.kamy.dev/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.kamy.dev%2Fmcp&type=streamable_http&id=kamy&name=Kamy
It answered our last check on 18 October 2026 in 295 ms. Over 10 checks since 5 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by kamy.dev and served from mcp.kamy.dev, the vendor's own domain: https://mcp.kamy.dev/mcp.
59, as returned by the server's own tools/list on 31 August 2026: ask_kamy, attest_artifact, bulk_signature_requests, convert_document, create_envelope, create_schedule, create_signature_request, create_template, and 51 more.
It answered our last check on 18 October 2026 in 295 ms. Over 10 checks since 5 September 2026 it answered 10.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.kamy.dev/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: dev.kamy. Endpoint host: mcp.kamy.dev. ARD identifier: urn:air:dev.kamy:mcp:kamy.
First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.