Kamy
Other PDF MCP servers ask you to install Chrome, manage a local renderer, and ship templates yourself. Kamy MCP is a hosted endpoint — point any MCP client at https://mcp.kamy.dev/mcp, paste an API key, and start asking your AI to "generate an invoice for Acme Corp". Eight production-ready templates ship with the service (invoice, quote, receipt, contract, agreement, certificate, report, shipping-
Allow With Approval
trustsnap_5b05e704c877e50a.- Step Up Auth
- Resource Contract
- Request Association
- Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.
- Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.
- Publish /.well-known/oauth-authorization-server from your issuer and include registration endpoint when supported.
- No segmented attention signals observed in the current window.
Dispute this assessment
If any published claim about this server -- its score, a risk flag, a capability classification, or its taxonomy -- is factually wrong, tell us what evidence shows and we will review it. This does not require claiming or verifying ownership of the server first.
Verify responds to disputes within 5 business days and resolves them within 15.
Dispute history
No disputes filed for this server.
Risks
Security posture
Tool capability & risk inventory
| Tool | Capabilities | Risk | Findings | Notes | Evidence |
|---|---|---|---|---|---|
list_templates |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
get_template_schema |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"slug": {
"description": "Template slug \u2014 e.g. 'invoice', 'receipt', 'uae-tax-invoice'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
render_pdf |
undetermined | Low | freeform input surface | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"capabilities": [
"undetermined"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": {},
"description": "Data to populate the template",
"type": "object"
},
"format": {
"default": "a4",
"enum": [
"a4",
"letter"
],
"type": "string"
},
"template": {
"description": "Template slug (e.g., 'invoice') or template UUID",
"type": "string"
}
},
"required": [
"template",
"data"
],
"type": "object"
},
"risk_flags": [
"freeform_input_surface"
]
}
Dispute this classification
|
validate_payload |
read | Low | freeform input surface | Safeguards hinted in metadata. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": {},
"description": "The data payload to validate against the template schema.",
"type": "object"
},
"template": {
"description": "Template slug (e.g. 'invoice') or template UUID.",
"type": "string"
}
},
"required": [
"template",
"data"
],
"type": "object"
},
"risk_flags": [
"freeform_input_surface"
]
}
Dispute this classification
|
extract_document |
undetermined | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"capabilities": [
"undetermined"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"source_base64": {
"description": "Base64-encoded PDF bytes. Use when the source isn't publicly fetchable.",
"type": "string"
},
"source_url": {
"description": "Public URL to a PDF (preferred). One of source_url or source_base64 is required.",
"format": "uri",
"type": "string"
},
"template": {
"description": "Predefined template id. invoice/receipt for AP and POS docs, contract for legal agreements, id_document for passports/IDs, generic_form for anything else.",
"enum": [
"invoice",
"receipt",
"contract",
"id_document",
"generic_form"
],
"type": "string"
}
},
"required": [
"template"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
ask_kamy |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"question": {
"description": "The question to ask Kamy about \u2014 how to render a template, why a render failed, what plan to pick, etc.",
"maxLength": 2000,
"minLength": 1,
"type": "string"
}
},
"required": [
"question"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
install_sdk |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"framework": {
"description": "The framework the user is working with",
"enum": [
"nextjs",
"remix",
"sveltekit",
"astro",
"express",
"fastify",
"hono",
"fastapi",
"flask"
],
"type": "string"
},
"packageManager": {
"default": "npm",
"description": "Package manager to use",
"enum": [
"npm",
"pnpm",
"yarn",
"bun"
],
"type": "string"
}
},
"required": [
"framework"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
generate_integration_code |
read | Low | freeform input surface | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"framework": {
"description": "Target framework",
"enum": [
"nextjs",
"remix",
"express",
"fastify",
"hono",
"fastapi",
"flask"
],
"type": "string"
},
"template": {
"description": "Template slug (e.g., 'invoice')",
"type": "string"
}
},
"required": [
"template",
"framework"
],
"type": "object"
},
"risk_flags": [
"freeform_input_surface"
]
}
Dispute this classification
|
create_signature_request |
write network | Medium | arbitrary network egress | Safeguards hinted in metadata. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": true,
"readOnlyHint": false
},
"capabilities": [
"write",
"network"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"authMethod": {
"description": "Identity-verification mode. `link` (default) \u2014 possession of the secret URL is the only check. `email_otp` \u2014 sign page renders a 6-digit OTP gate; code emailed to `signerEmail`. `sms_otp` \u2014 same gate, code texted to `signerPhone` (which must then be supplied). Recommend `email_otp` for higher-value transactions.",
"enum": [
"link",
"sms_otp",
"email_otp"
],
"type": "string"
},
"ccEmails": {
"description": "Up to 10 observer addresses CC'd on the invite and the completion notice. Not signers themselves.",
"items": {
"format": "email",
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"expiresIn": {
"description": "How long (seconds) the sign link stays valid. Defaults to 30 days. Min 1 hour, max 30 days.",
"maximum": 2592000,
"minimum": 3600,
"type": "integer"
},
"message": {
"description": "Optional message rendered in the email invitation body.",
"maxLength": 500,
"type": "string"
},
"placedFields": {
"description": "Up to 100 sender-defined fillable fields stamped onto the PDF at sign time. Use for flat PDFs that don't ship AcroForm widgets. Names must be unique.",
"items": {
"additionalProperties": false,
"properties": {
"anchor": {
"description": "Text anchor \u2014 server locates this string in the PDF and uses its position.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"defaultValue": {
"maxLength": 2000,
"type": "string"
},
"h": {
"description": "Height in PDF points.",
"maximum": 800,
"minimum": 8,
"type": "number"
},
"name": {
"description": "Unique field name within the request.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"options": {
"description": "Valid choices for radio / dropdown.",
"items": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"page": {
"description": "1-indexed page number.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"required": {
"type": "boolean"
},
"signerLabel": {
"maxLength": 200,
"type": "string"
},
"type": {
"enum": [
"text",
"textarea",
"checkbox",
"date",
"initials",
"radio",
"dropdown"
],
"type": "string"
},
"w": {
"description": "Width in PDF points.",
"maximum": 800,
"minimum": 8,
"type": "number"
},
"x": {
"description": "Bottom-left x in PDF points.",
"maximum": 2000,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Bottom-left y in PDF points.",
"maximum": 2000,
"minimum": 0,
"type": "number"
}
},
"required": [
"name",
"type",
"page",
"x",
"y",
"w",
"h"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"position": {
"additionalProperties": false,
"description": "Optional sender-chosen signature placement in PDF points (72 dpi, origin bottom-left). Defaults to bottom-right of the last page sized 220\u00d764 pt; when omitted, the signer can drag the placeholder on the sign page.",
"properties": {
"h": {
"maximum": 400,
"minimum": 20,
"type": "number"
},
"page": {
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"w": {
"maximum": 800,
"minimum": 40,
"type": "number"
},
"x": {
"maximum": 2000,
"minimum": 0,
"type": "number"
},
"y": {
"maximum": 2000,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"reminderCadenceHours": {
"description": "When set (24\u2013168), the auto-reminder cron resends the invite every N hours while the request stays pending, up to 3 reminders. Omit for no auto-reminders.",
"maximum": 168,
"minimum": 24,
"type": "integer"
},
"renderId": {
"description": "Render UUID returned by render_pdf or any /v1/render call. The render's PDF is the document the signer will receive.",
"format": "uuid",
"type": "string"
},
"requireStamp": {
"description": "Require the signer to upload a company stamp / seal alongside their personal signature (UAE, KSA, JP, KR, IN, CN B2B workflows). Server refuses to seal without one.",
"type": "boolean"
},
"signOnEveryPage": {
"description": "When true, the server stamps the signer's signature on every page of the source PDF instead of only the configured position. Common B2B contract pattern.",
"type": "boolean"
},
"signatureTemplateId": {
"description": "Apply a signature template's defaults (placedFields, position, message, expiresIn, ccEmails). Request-level fields override the template.",
"format": "uuid",
"type": "string"
},
"signerEmail": {
"description": "Recipient email address.",
"format": "email",
"type": "string"
},
"signerName": {
"description": "Recipient full name. Must be typed verbatim by the signer to confirm intent.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"signerPhone": {
"description": "E.164 phone number. Required when `authMethod` is `sms_otp`; ignored otherwise. Example: `+14155551234`.",
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
}
},
"required": [
"renderId",
"signerEmail",
"signerName"
],
"type": "object"
},
"risk_flags": [
"arbitrary_network_egress"
]
}
Dispute this classification
|
list_signature_requests |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"limit": {
"description": "Default 50.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Default 0.",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
get_signature_certificate |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"signatureRequestId": {
"description": "ID of the signature_request to fetch the Certificate of Completion for. Must be in a terminal state (signed / declined / delegated / voided / expired); pending requests return 409.",
"format": "uuid",
"type": "string"
}
},
"required": [
"signatureRequestId"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
pki_sign_pdf |
undetermined | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"capabilities": [
"undetermined"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"location": {
"description": "Optional /Sig dictionary Location.",
"maxLength": 120,
"type": "string"
},
"reason": {
"description": "Optional /Sig dictionary Reason \u2014 surfaced in Acrobat's signature panel. ASCII-coerced server-side.",
"maxLength": 200,
"type": "string"
},
"renderId": {
"description": "Render UUID returned by render_pdf or any /v1/render call. The PDF will be sealed with a Kamy-issued X.509 leaf certificate.",
"format": "uuid",
"type": "string"
},
"signerEmail": {
"description": "Override the signer email. Defaults to the account's email.",
"format": "email",
"type": "string"
},
"signerName": {
"description": "Override the signer display name. Defaults to the account's full_name.",
"maxLength": 120,
"type": "string"
},
"withRevocationInfo": {
"description": "When false, skip embedding the Kamy CA CRL into the PKCS#7 SignedData (PAdES-B-T instead of B-LT). Online verifiers can still fetch the CRL via the Distribution Point on the leaf cert. Default: true.",
"type": "boolean"
},
"withTimestamp": {
"description": "When false, skip the RFC 3161 timestamp call (PAdES-B-B instead of B-T). Default: true.",
"type": "boolean"
}
},
"required": [
"renderId"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
verify_pdf_signature |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"pdfBase64": {
"description": "Base64-encoded PDF bytes. The MCP Worker hashes the file in-memory and does not store or forward it.",
"minLength": 1,
"type": "string"
}
},
"required": [
"pdfBase64"
],
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
get_api_key_instructions |
read | Low | none | No explicit safeguard hints detected. |
Schema & evidence{
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"capabilities": [
"read"
],
"input_schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"risk_flags": []
}
Dispute this classification
|
Write-action governance
Status detail: No unsafe write-action governance gaps detected on the latest validation.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
| No high-risk tools were detected on the latest run. | |||
Recommended runtime policy
No policy blockers under the default policy stance.
Action-controls diff
New actions
| Action | Risk | Flags |
|---|---|---|
| No newly added actions. | ||
Changed actions
| Action | Change types | Risk |
|---|---|---|
| No materially changed actions. | ||
Critical alerts
Compatibility
Client readiness verdicts
Client compatibility only means the server shape can work with a client. Production trust decision and write-action publishing are evaluated separately so a client-compatible server can still be blocked for production.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Warningstep_up_auth_probe• Missingconnector_replay_probe• OK — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Evidence provenance
initialize• OKtools_list• OKtransport_compliance_probe• Warning
Evidence provenance
action_safety_probe• OK
Evidence provenance
tool_snapshot_probe• OKconnector_replay_probe• OK
Client readiness gate details
Remediation checklist
- Add OAuth-based authentication for remote connector auth.
- Support dynamic client registration (DCR) to simplify connector setup.
- Document step-up auth requirements in a connector-friendly way.
- Improve OAuth interoperability -- see the OAuth Interop score breakdown.
- Limit the exposed surface to search/fetch-style read tools.
- Remove or isolate write, delete, and exec-capable tools before using this read/search-only client profile.
Remediation checklist
- Limit the exposed surface to search/fetch-style read tools.
- Remove or isolate write, delete, and exec-capable tools before using this read/search-only client profile.
- Configure OAuth for authenticated remote MCP access.
- Remove export, bulk, mutating, and high-blast-radius exposure before certifying company-knowledge use.
- Satisfy OAuth, compatibility, and connector-refresh requirements before using the Messages API remote MCP path.
- Resolve transport compliance issues before wider client rollout.
Remediation checklist
- Add a clearer auth boundary around risky write actions.
Verdict traces
- No active alert triggers.
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Not client-compatible | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Not client-compatible | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Publishing blocked | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
- Search Fetch Only: No
- Write Actions Present: Yes
- Oauth Configured: No
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
- remote_http_endpoint: Passes
- oauth_discovery: Degraded
- frozen_tool_snapshot_refresh: Passes
- request_association: Not Assessed
- remote_transport: Passes
- tool_discovery: Passes
- auth_connect: Passes
- safe_write_review: Degraded
Recommended for
Evidence
Current trust snapshot
trustsnap_5b05e704c877e50aCanonical machine links
Evidence confidence
Latest validation evidence
Failures
oauth_authorization_serverno authorization serveroauth_protected_resourceClient error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404openid_configurationno authorization serverserver_cardClient error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
OK | n/a | 1 egress-capable, 4 declared non-read-only, non-read capabilities: write tool(s); no clear auth boundary; safeguards=2; confirmation=validate payload. |
advanced_capabilities_probe |
Missing | n/a | No advanced MCP capability signals detected. |
connector_publishability_probe |
Warning | n/a | Publishability blockers: protocol version, session resume, step up auth, transport compliance, +2 more. |
connector_replay_probe |
OK | n/a | Backward compatible with no breaking tool-surface changes. |
determinism_probe |
OK | 185.9 ms | Check completed |
initialize |
OK | 111.3 ms | Protocol 2025-03-26 |
instruction_tool_reference_probe |
OK | n/a | Check completed |
interactive_flow_probe |
OK | n/a | Check completed |
oauth_authorization_server |
Missing | n/a | no authorization server |
oauth_protected_resource |
Error | 151.1 ms | Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/oauth-protected-resource' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
official_registry_probe |
Missing | n/a | Check completed |
openid_configuration |
Missing | n/a | no authorization server |
probe_noise_resilience |
OK | 250.8 ms | Fetched https://mcp.kamy.dev/robots.txt |
prompt_get |
Missing | n/a | not advertised |
prompts_list |
Missing | 218.6 ms | not supported |
protocol_version_probe |
Warning | n/a | Claims 2025-03-26; 2 release(s) behind 2025-11-25. |
provenance_divergence_probe |
Not_Assessed | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
Missing | n/a | not advertised |
resources_list |
Missing | 116.1 ms | not supported |
schema_divergence_probe |
Missing | n/a | no server card tools |
server_card |
Error | 26.7 ms | Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
session_resume_probe |
Warning | n/a | no session id |
step_up_auth_probe |
Missing | n/a | No OAuth or incremental-scope signals detected. |
tool_snapshot_probe |
OK | n/a | Check completed |
tools_list |
OK | 167.7 ms | 14 tool(s) exposed |
transport_compliance_probe |
Warning | 248.5 ms | Issues: missing session id, missing protocol header (bad protocol=400). |
utility_coverage_probe |
OK | 27.4 ms | No completions evidence; no pagination evidence; tasks auth required. |
Known versions
- No versions recorded.
Public server reputation
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Passes |
|
| Read-only fetch flow | Degraded |
|
| OAuth-required connect | Degraded |
|
| Safe write flow with confirmation | Likely to fail |
|
Utility coverage
Tool snapshot diff & changelog
Required-argument changes
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument changes detected. | ||
Output-schema drift
| Tool | Previous properties | Latest properties |
|---|---|---|
| No output-schema drift detected. | ||
Validation diff
Regressed checks: none
Improved checks: none
Newly assessed dimensions: none
No longer assessed dimensions: none
| Component | Previous | Latest | Delta |
|---|---|---|---|
| No component deltas between the latest two runs. | |||
Registry & provenance divergence
Active alerts
No active alerts for the current server state.
Aliases & registry graph
| Identifier | Source | Canonical | Identity evidence | Score |
|---|---|---|---|---|
rakanalalami/kamy |
glama_registry | yes | canonical | 60.9 |
Alias consolidation
Strong alias identity requires matching remote URL, server-card URL, repository slug, or explicit registry cross-reference; shared provider namespace alone is not identity.
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| No source disagreements detected. | ||
Fix it
Why this score?
Algorithmic score breakdown
1 component(s) not assessed for this run: Provenance Divergence
Experimental candidate components
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Expose /.well-known/oauth-protected-resource | Without a protected-resource document, OAuth clients cannot discover auth requirements reliably. | Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.Playbook
|
| High | Publish OAuth authorization-server metadata | Clients need authorization-server metadata to discover issuer, endpoints, and DCR support. | Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Advertise a current MCP protocol revision (2025-06-18 or later) in both the initialize response and the MCP-Protocol-Version header.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | Resolve every blocker named by connector_publishability_probe, then rerun it before submitting or refreshing a connector listing.Playbook
|
| Medium | Document minimal scopes and return cleaner auth challenges | Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints. | Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.Playbook
|
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Raise Adoption & Market score | Adoption clues and public evidence that the server is intended for external use. | Increase external documentation and directory coverage so users can discover and evaluate the server. |
| Medium | Support resumable HTTP sessions cleanly | Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports. | Persist session state keyed by Mcp-Session-Id and honor Last-Event-ID on GET reconnects so clients can resume a dropped Streamable HTTP session.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Advertise only the advanced capabilities (roots, sampling, elicitation) you have actually implemented end to end in the initialize capabilities object.Playbook
|
| Low | Publish or reconcile the server in the official MCP registry | Official registry presence improves discovery confidence and cross-source consistency. | Create or update the official MCP registry entry with the canonical MCP endpoint and matching repository metadata, then rerun official_registry_probe.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Step-Up Auth | 0/4 | -4.0 |
| Resource Contract | 0/4 | -4.0 |
| Request Association | 0/4 | -4.0 |
| Recovery Semantics | 0/4 | -4.0 |
| Prompt Contract | 0/4 | -4.0 |
| OAuth Interop | 0/4 | -4.0 |
| Supply Chain Signal | 0/4 | -4.0 |
| Advanced Capability Coverage | 0/4 | -4.0 |
| Utility Coverage | 1/4 | -3.0 |
| Transport Compliance | 2/4 | -2.0 |
| Spec Recency | 2/4 | -2.0 |
| Security Hygiene | 2/4 | -2.0 |
Technical compatibility profiles
These scores measure technical client compatibility only. Client publishability and production readiness are evaluated separately against policy, transport, and write-surface blockers.
Connector URL: https://mcp.kamy.dev/mcp # No OAuth metadata detected. # Server: rakanalalami/kamy
{
"mcpServers": {
"kamy": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.kamy.dev/mcp"]
}
}
}
smithery mcp add "https://mcp.kamy.dev/mcp"
curl -sS https://mcp.kamy.dev/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Governance
MCP TrustOps
TrustOps turns this report into operational controls: validation targets and SLAs, authenticated validation, semantic benchmarks, policy exports, alert subscriptions, badges, cost/compliance metadata, and runtime routing. Fresh trusted index decisions stay separate from long-tail inventory so stale scores do not masquerade as current evidence.
/v1/decideAlert subscription types
MCP Runtime hosting
Verify Hosted MCP turns a trusted server report into a managed remote MCP endpoint with GitHub deployment provenance, sandbox policy, encrypted secrets, release history, rollback, and audit/usage events.
/hosted/{namespace}/{name}/mcp| Deployment | Status | Endpoint | Release |
|---|---|---|---|
| No hosted runtime deployments yet. | |||
Authenticated validation sessions
Public validation is free. Authenticated validation is paid and proves scoped behavior, write-action safeguards, and authenticated tool execution.
/v1/verify/v1/ci/previewInstall snippets
Connector URL: https://mcp.kamy.dev/mcp # No OAuth metadata detected. # Server: rakanalalami/kamy
{
"mcpServers": {
"kamy": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.kamy.dev/mcp"]
}
}
}
smithery mcp add "https://mcp.kamy.dev/mcp"
curl -sS https://mcp.kamy.dev/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
tools/list, prompts/list, and resources/list checks.rakanalalami/kamy.History
Validation history
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| Aug 15, 2026 03:57:23 PM UTC | Healthy | 60.9 | 1836.5 ms | 14 |
| Aug 15, 2026 03:53:13 AM UTC | Healthy | 60.9 | 1729.1 ms | 14 |
| Aug 14, 2026 03:51:30 PM UTC | Healthy | 61.5 | 1596.0 ms | 14 |
| Aug 14, 2026 03:20:21 AM UTC | Healthy | 61.5 | 1854.3 ms | 14 |
| Aug 13, 2026 08:34:17 PM UTC | Healthy | 61.5 | 2112.6 ms | 14 |
| Aug 13, 2026 08:29:11 AM UTC | Healthy | 61.5 | 1346.0 ms | 14 |
| Aug 12, 2026 07:31:59 PM UTC | Healthy | 62.0 | 2058.9 ms | 14 |
| Aug 12, 2026 07:31:47 AM UTC | Healthy | 60.4 | 1539.1 ms | 14 |
| Aug 11, 2026 11:30:44 PM UTC | Failing | n/a | 344.6 ms | 0 |
| Aug 11, 2026 07:30:35 PM UTC | Failing | n/a | 320.0 ms | 0 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| Aug 15, 2026 03:57:23 PM UTC | Healthy | 60.9 | 2025-03-26 | public | 14 | 0 | none |
| Aug 15, 2026 03:53:13 AM UTC | Healthy | 60.9 | 2025-03-26 | public | 14 | 0 | none |
| Aug 14, 2026 03:51:30 PM UTC | Healthy | 61.5 | 2025-03-26 | public | 14 | 0 | none |
| Aug 14, 2026 03:20:21 AM UTC | Healthy | 61.5 | 2025-03-26 | public | 14 | 0 | none |
| Aug 13, 2026 08:34:17 PM UTC | Healthy | 61.5 | 2025-03-26 | public | 14 | 0 | none |
| Aug 13, 2026 08:29:11 AM UTC | Healthy | 61.5 | 2025-03-26 | public | 14 | 0 | none |
| Aug 12, 2026 07:31:59 PM UTC | Healthy | 62.0 | 2025-03-26 | public | 14 | 0 | none |
| Aug 12, 2026 07:31:47 AM UTC | Healthy | 60.4 | 2025-03-26 | public | 14 | 0 | none |
| Aug 11, 2026 11:30:44 PM UTC | Failing | n/a | unknown | unknown | 0 | 0 | none |
| Aug 11, 2026 07:30:35 PM UTC | Failing | n/a | unknown | unknown | 0 | 0 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| Aug 15, 2026 03:57:21 PM UTC | Completed | Healthy | 1836.5 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, instruction_tool_reference_probe, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 15, 2026 03:53:11 AM UTC | Completed | Healthy | 1729.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, instruction_tool_reference_probe, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 14, 2026 03:51:28 PM UTC | Completed | Healthy | 1596.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, instruction_tool_reference_probe, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 14, 2026 03:20:20 AM UTC | Completed | Healthy | 1854.3 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, instruction_tool_reference_probe, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 13, 2026 08:34:15 PM UTC | Completed | Healthy | 2112.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 13, 2026 08:29:09 AM UTC | Completed | Healthy | 1346.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 12, 2026 07:31:57 PM UTC | Completed | Healthy | 2058.9 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 12, 2026 07:31:46 AM UTC | Completed | Healthy | 1539.1 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 11, 2026 11:30:44 PM UTC | Completed | Failing | 344.6 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe (not counted in confidence) |
| Aug 11, 2026 07:30:35 PM UTC | Completed | Failing | 320.0 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe (not counted in confidence) |
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| Aug 15, 2026 03:57:23 PM UTC | Latest validation: healthy | Score 60.9 with status healthy. |
| Aug 15, 2026 03:53:13 AM UTC | Score changed | Score delta -0.5 versus the previous run. |
| Aug 05, 2026 11:01:39 AM UTC | Score corrected (post-1.0.503 remediation, R1 zero-anchoring) | Prior: 69.54. Corrected: 66.43. |
Technical details
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [
"validate_payload"
],
"reason": null,
"safeguard_count": 2,
"summary": {
"annotation_conflict_tools": 0,
"bulk_access_tools": 0,
"capability_distribution": {
"network": 1,
"read": 10,
"undetermined": 3,
"write": 1
},
"declared_non_read_only_tools": 4,
"destructive_tools": 0,
"egress_tools": 1,
"exec_tools": 0,
"has_mutating_capability": true,
"has_non_read_capability": true,
"high_risk_tools": 0,
"risk_distribution": {
"critical": 0,
"high": 0,
"low": 13,
"medium": 1
},
"secret_tools": 0,
"tool_count": 14
}
},
"latency_ms": null,
"status": "ok"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [],
"enabled_count": 0,
"initialize_capability_keys": [
"tools"
]
},
"latency_ms": null,
"status": "missing"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"protocol_version",
"session_resume",
"step_up_auth",
"transport_compliance",
"request_association",
"server_card"
],
"criteria": {
"action_safety": true,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": false,
"remote_transport": true,
"request_association": false,
"server_card": false,
"session_resume": false,
"step_up_auth": false,
"tool_surface": true,
"tools_list": true,
"transport_compliance": false
},
"high_risk_tools": 0,
"tool_count": 14,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"added_tools": [],
"additive_output_changes": [],
"backward_compatible": true,
"output_breaks": [],
"removed_tools": [],
"required_arg_breaks": [],
"would_break_after_refresh": false
},
"latency_ms": null,
"status": "ok"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "46a7d5b3e8d8be00a31469d17bf80dbf37bd8593cc3b2cb530765689737b0140",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 185.86,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"tools": {
"listChanged": true
}
},
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "kamy",
"version": "1.2.0"
}
}
},
"url": "https://mcp.kamy.dev/mcp"
},
"latency_ms": 111.26,
"status": "ok"
},
"instruction_tool_reference_probe": {
"details": {
"missing_tools": [],
"observed_tool_count": 14,
"referenced_tools": []
},
"latency_ms": null,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": [
"browser",
"consent"
]
},
"latency_ms": null,
"status": "ok"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://mcp.kamy.dev/.well-known/oauth-protected-resource"
},
"latency_ms": 151.12,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": false,
"official_peer_count": 0,
"registry_source": "glama_registry"
},
"latency_ms": null,
"status": "missing"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"consent_error": null,
"headers": {
"content-type": "text/plain; charset=utf-8"
},
"http_status": 200,
"url": "https://mcp.kamy.dev/robots.txt",
"validation_disallowed": false
},
"latency_ms": 250.78,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 3,
"jsonrpc": "2.0"
},
"reason": "not_supported",
"url": "https://mcp.kamy.dev/mcp"
},
"latency_ms": 218.55,
"status": "missing"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2025-03-26",
"lag_days": 244,
"latest_known_version": "2025-11-25",
"releases_behind": 2,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"comparable_field_count": 0,
"compared_fields": [
"title",
"version",
"homepage",
"repository"
],
"direct_official_match": false,
"drift_fields": [],
"metadata_document_count": 1,
"readable_sources": [],
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "not_assessed"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found"
},
"id": 5,
"jsonrpc": "2.0"
},
"reason": "not_supported",
"url": "https://mcp.kamy.dev/mcp"
},
"latency_ms": 116.09,
"status": "missing"
},
"schema_divergence_probe": {
"details": {
"auth_scheme_mismatch": false,
"card_server_name": null,
"card_server_version": null,
"compared_dimensions": [
"server_name",
"server_version",
"declared_vs_observed_auth",
"tool_membership",
"parameter_names",
"required_parameters",
"parameter_types",
"output_schema_presence"
],
"compared_tool_count": 0,
"live_server_name": "kamy",
"live_server_version": "1.2.0",
"reason": "no_server_card_tools",
"server_name_mismatch": false,
"server_version_mismatch": false
},
"latency_ms": null,
"status": "missing"
},
"server_card": {
"details": {
"error": "Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://mcp.kamy.dev/.well-known/mcp/server-card.json"
},
"latency_ms": 26.71,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": "2025-03-26",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"added": [],
"changed_outputs": [],
"current_tool_count": 14,
"previous_tool_count": 14,
"removed": [],
"similarity": 1.0
},
"latency_ms": null,
"status": "ok"
},
"tools_list": {
"details": {
"headers": {
"content-type": "text/event-stream"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List Kamy's public system PDF templates. No authentication required.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_templates",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "List templates"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "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.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"slug": {
"description": "Template slug \u2014 e.g. 'invoice', 'receipt', 'uae-tax-invoice'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_template_schema",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Get template schema"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Render a PDF from a Kamy template and data when a Kamy API key is configured. Without a key, returns dashboard setup instructions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": {},
"description": "Data to populate the template",
"type": "object"
},
"format": {
"default": "a4",
"enum": [
"a4",
"letter"
],
"type": "string"
},
"template": {
"description": "Template slug (e.g., 'invoice') or template UUID",
"type": "string"
}
},
"required": [
"template",
"data"
],
"type": "object"
},
"name": "render_pdf",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Render PDF"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Dry-run a render payload against a template's schema WITHOUT producing a PDF or using quota. Returns per-field self-healing errors (expected type, value received, allowed values, an example) so you can fix the data before render_pdf. Requires a Kamy API key.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"data": {
"additionalProperties": {},
"description": "The data payload to validate against the template schema.",
"type": "object"
},
"template": {
"description": "Template slug (e.g. 'invoice') or template UUID.",
"type": "string"
}
},
"required": [
"template",
"data"
],
"type": "object"
},
"name": "validate_payload",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Validate payload"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "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 document and act on it.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"source_base64": {
"description": "Base64-encoded PDF bytes. Use when the source isn't publicly fetchable.",
"type": "string"
},
"source_url": {
"description": "Public URL to a PDF (preferred). One of source_url or source_base64 is required.",
"format": "uri",
"type": "string"
},
"template": {
"description": "Predefined template id. invoice/receipt for AP and POS docs, contract for legal agreements, id_document for passports/IDs, generic_form for anything else.",
"enum": [
"invoice",
"receipt",
"contract",
"id_document",
"generic_form"
],
"type": "string"
}
},
"required": [
"template"
],
"type": "object"
},
"name": "extract_document",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Extract document (Kamy Ingest)"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "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.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"question": {
"description": "The question to ask Kamy about \u2014 how to render a template, why a render failed, what plan to pick, etc.",
"maxLength": 2000,
"minLength": 1,
"type": "string"
}
},
"required": [
"question"
],
"type": "object"
},
"name": "ask_kamy",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Ask Kamy"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Get install commands and setup code for @kamydev/sdk in your framework.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"framework": {
"description": "The framework the user is working with",
"enum": [
"nextjs",
"remix",
"sveltekit",
"astro",
"express",
"fastify",
"hono",
"fastapi",
"flask"
],
"type": "string"
},
"packageManager": {
"default": "npm",
"description": "Package manager to use",
"enum": [
"npm",
"pnpm",
"yarn",
"bun"
],
"type": "string"
}
},
"required": [
"framework"
],
"type": "object"
},
"name": "install_sdk",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Install Kamy SDK"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Generate copy-paste integration code for a specific Kamy template and framework.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"framework": {
"description": "Target framework",
"enum": [
"nextjs",
"remix",
"express",
"fastify",
"hono",
"fastapi",
"flask"
],
"type": "string"
},
"template": {
"description": "Template slug (e.g., 'invoice')",
"type": "string"
}
},
"required": [
"template",
"framework"
],
"type": "object"
},
"name": "generate_integration_code",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Generate integration code"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": true,
"readOnlyHint": false
},
"description": "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.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"authMethod": {
"description": "Identity-verification mode. `link` (default) \u2014 possession of the secret URL is the only check. `email_otp` \u2014 sign page renders a 6-digit OTP gate; code emailed to `signerEmail`. `sms_otp` \u2014 same gate, code texted to `signerPhone` (which must then be supplied). Recommend `email_otp` for higher-value transactions.",
"enum": [
"link",
"sms_otp",
"email_otp"
],
"type": "string"
},
"ccEmails": {
"description": "Up to 10 observer addresses CC'd on the invite and the completion notice. Not signers themselves.",
"items": {
"format": "email",
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"expiresIn": {
"description": "How long (seconds) the sign link stays valid. Defaults to 30 days. Min 1 hour, max 30 days.",
"maximum": 2592000,
"minimum": 3600,
"type": "integer"
},
"message": {
"description": "Optional message rendered in the email invitation body.",
"maxLength": 500,
"type": "string"
},
"placedFields": {
"description": "Up to 100 sender-defined fillable fields stamped onto the PDF at sign time. Use for flat PDFs that don't ship AcroForm widgets. Names must be unique.",
"items": {
"additionalProperties": false,
"properties": {
"anchor": {
"description": "Text anchor \u2014 server locates this string in the PDF and uses its position.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"defaultValue": {
"maxLength": 2000,
"type": "string"
},
"h": {
"description": "Height in PDF points.",
"maximum": 800,
"minimum": 8,
"type": "number"
},
"name": {
"description": "Unique field name within the request.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"options": {
"description": "Valid choices for radio / dropdown.",
"items": {
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"maxItems": 50,
"minItems": 1,
"type": "array"
},
"page": {
"description": "1-indexed page number.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"required": {
"type": "boolean"
},
"signerLabel": {
"maxLength": 200,
"type": "string"
},
"type": {
"enum": [
"text",
"textarea",
"checkbox",
"date",
"initials",
"radio",
"dropdown"
],
"type": "string"
},
"w": {
"description": "Width in PDF points.",
"maximum": 800,
"minimum": 8,
"type": "number"
},
"x": {
"description": "Bottom-left x in PDF points.",
"maximum": 2000,
"minimum": 0,
"type": "number"
},
"y": {
"description": "Bottom-left y in PDF points.",
"maximum": 2000,
"minimum": 0,
"type": "number"
}
},
"required": [
"name",
"type",
"page",
"x",
"y",
"w",
"h"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"position": {
"additionalProperties": false,
"description": "Optional sender-chosen signature placement in PDF points (72 dpi, origin bottom-left). Defaults to bottom-right of the last page sized 220\u00d764 pt; when omitted, the signer can drag the placeholder on the sign page.",
"properties": {
"h": {
"maximum": 400,
"minimum": 20,
"type": "number"
},
"page": {
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"w": {
"maximum": 800,
"minimum": 40,
"type": "number"
},
"x": {
"maximum": 2000,
"minimum": 0,
"type": "number"
},
"y": {
"maximum": 2000,
"minimum": 0,
"type": "number"
}
},
"type": "object"
},
"reminderCadenceHours": {
"description": "When set (24\u2013168), the auto-reminder cron resends the invite every N hours while the request stays pending, up to 3 reminders. Omit for no auto-reminders.",
"maximum": 168,
"minimum": 24,
"type": "integer"
},
"renderId": {
"description": "Render UUID returned by render_pdf or any /v1/render call. The render's PDF is the document the signer will receive.",
"format": "uuid",
"type": "string"
},
"requireStamp": {
"description": "Require the signer to upload a company stamp / seal alongside their personal signature (UAE, KSA, JP, KR, IN, CN B2B workflows). Server refuses to seal without one.",
"type": "boolean"
},
"signOnEveryPage": {
"description": "When true, the server stamps the signer's signature on every page of the source PDF instead of only the configured position. Common B2B contract pattern.",
"type": "boolean"
},
"signatureTemplateId": {
"description": "Apply a signature template's defaults (placedFields, position, message, expiresIn, ccEmails). Request-level fields override the template.",
"format": "uuid",
"type": "string"
},
"signerEmail": {
"description": "Recipient email address.",
"format": "email",
"type": "string"
},
"signerName": {
"description": "Recipient full name. Must be typed verbatim by the signer to confirm intent.",
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"signerPhone": {
"description": "E.164 phone number. Required when `authMethod` is `sms_otp`; ignored otherwise. Example: `+14155551234`.",
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
}
},
"required": [
"renderId",
"signerEmail",
"signerName"
],
"type": "object"
},
"name": "create_signature_request",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Send for e-signature"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "List signature requests created by the configured Kamy account, newest first. Without a key, returns dashboard setup instructions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"limit": {
"description": "Default 50.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Default 0.",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "list_signature_requests",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "List signature requests"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Returns the authenticated download URL for a signature request's Certificate of Completion PDF \u2014 the process audit trail (invite \u2192 opened \u2192 consent \u2192 signed, with IP / user-agent) that legal teams expect. Only available after the request reaches a terminal state. Without a key, returns dashboard setup instructions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"signatureRequestId": {
"description": "ID of the signature_request to fetch the Certificate of Completion for. Must be in a terminal state (signed / declined / delegated / voided / expired); pending requests return 409.",
"format": "uuid",
"type": "string"
}
},
"required": [
"signatureRequestId"
],
"type": "object"
},
"name": "get_signature_certificate",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Get Certificate of Completion URL"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": false
},
"description": "Cryptographically sign an existing render with PAdES when a Kamy API key is configured. Without a key, returns dashboard setup instructions.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"location": {
"description": "Optional /Sig dictionary Location.",
"maxLength": 120,
"type": "string"
},
"reason": {
"description": "Optional /Sig dictionary Reason \u2014 surfaced in Acrobat's signature panel. ASCII-coerced server-side.",
"maxLength": 200,
"type": "string"
},
"renderId": {
"description": "Render UUID returned by render_pdf or any /v1/render call. The PDF will be sealed with a Kamy-issued X.509 leaf certificate.",
"format": "uuid",
"type": "string"
},
"signerEmail": {
"description": "Override the signer email. Defaults to the account's email.",
"format": "email",
"type": "string"
},
"signerName": {
"description": "Override the signer display name. Defaults to the account's full_name.",
"maxLength": 120,
"type": "string"
},
"withRevocationInfo": {
"description": "When false, skip embedding the Kamy CA CRL into the PKCS#7 SignedData (PAdES-B-T instead of B-LT). Online verifiers can still fetch the CRL via the Distribution Point on the leaf cert. Default: true.",
"type": "boolean"
},
"withTimestamp": {
"description": "When false, skip the RFC 3161 timestamp call (PAdES-B-B instead of B-T). Default: true.",
"type": "boolean"
}
},
"required": [
"renderId"
],
"type": "object"
},
"name": "pki_sign_pdf",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "PKI-sign PDF"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Compute the kamy.dev/verify URL for a PDF without making a Kamy API call. Pass the PDF as base64; the MCP Worker hashes it in-memory and does not store or forward it.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"pdfBase64": {
"description": "Base64-encoded PDF bytes. The MCP Worker hashes the file in-memory and does not store or forward it.",
"minLength": 1,
"type": "string"
}
},
"required": [
"pdfBase64"
],
"type": "object"
},
"name": "verify_pdf_signature",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Verify PDF signature"
},
{
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"annotations": {
"destructiveHint": false,
"openWorldHint": false,
"readOnlyHint": true
},
"description": "Return step-by-step instructions for creating a Kamy API key in the dashboard. Does not open the browser.",
"execution": {
"taskSupport": "forbidden"
},
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_api_key_instructions",
"securitySchemes": [
{
"type": "noauth"
}
],
"title": "Get API key instructions"
}
]
}
},
"url": "https://mcp.kamy.dev/mcp"
},
"latency_ms": 167.71,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json"
},
"bad_protocol_payload": {
"error": {
"code": -32000,
"message": "Bad Request: Unsupported protocol version: 1999-99-99 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)"
},
"id": null,
"jsonrpc": "2.0"
},
"bad_protocol_status_code": 400,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 248.53,
"status": "warning"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 401,
"probe_status": "auth_required"
}
},
"latency_ms": 27.45,
"status": "ok"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://mcp.kamy.dev/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"server_card": {
"error": "Client error '404 Not Found' for url 'https://mcp.kamy.dev/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://mcp.kamy.dev/.well-known/mcp/server-card.json"
}
},
"remote_url": "https://mcp.kamy.dev/mcp",
"server_card_payload": null,
"server_identifier": "rakanalalami/kamy"
}
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: https://glama.ai/mcp/servers/ywuczljwen
- Docs: none
- Support: https://github.com/rakanalalami/kamy
- Icon: none
- Remote endpoint: https://mcp.kamy.dev/mcp
- Directory listing: none
- Server card: none
Transport compliance drilldown
Issues: missing_session_id, missing_protocol_header
Request association
Connector replay
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||