raccha.ai
REMOTE · RACCHA.AI · SCANNED SEP 20
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security51
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 59 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS enforcement could not be verified: the plaintext port answered with HTTP 406, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability72
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 7509 tokens (~127/item across 59 items; 59 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management62
- Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 41 breaking changes, 0 auth/transport breaks, 5 additions. See how to fix → Fail
Tool Coverage87
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 61% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_role" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 60 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the raccha.ai MCP server?
raccha.ai is a hosted endpoint at https://raccha.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · raccha.ai
claude mcp add --transport http ai-raccha-raccha 'https://raccha.ai/mcp'
{
"mcpServers": {
"ai-raccha-raccha": {
"url": "https://raccha.ai/mcp"
}
}
} {
"servers": {
"ai-raccha-raccha": {
"type": "http",
"url": "https://raccha.ai/mcp"
}
}
} [mcp_servers.ai-raccha-raccha] url = "https://raccha.ai/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ai-raccha-raccha": {
"type": "remote",
"url": "https://raccha.ai/mcp",
"enabled": true
}
}
} openclaw mcp add ai-raccha-raccha --url 'https://raccha.ai/mcp' --transport streamable-http
mcp_servers:
ai-raccha-raccha:
url: "https://raccha.ai/mcp" {
"McpServers": {
"ai-raccha-raccha": {
"Transport": "http",
"Url": "https://raccha.ai/mcp"
}
}
} assistant mcp add ai-raccha-raccha -t streamable-http -u 'https://raccha.ai/mcp'
{
"mcpServers": {
"ai-raccha-raccha": {
"type": "http",
"url": "https://raccha.ai/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 61 to 64.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 54 to 57.
- 9 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 51.
- 6 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 41.
- 4 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 31 to 34.
- 3 Sept 26 0
- Server version: 3.1.2 → 3.2.0 functional
- 2 Sept 26 −4
- Stability: 0.57 → fail ▼ security
- A breaking change shipped without a version bump: still 3.1.2 ▼ security
- Tool “discussion_create” rewrote its description, which is the text the model reads security
- Tool “discussion_get” rewrote its description, which is the text the model reads security
- Schema quality: pass → fail ▼ functional
- “create_access_key” changed the type of “owner_key”: string → string|null ▼ functional
- “create_role” changed the type of “owner_key”: string → string|null ▼ functional
- “delete_role” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_claim_role” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_create” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_get” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_join” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_list” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_list_open” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_post” changed the type of “owner_key”: string → string|null ▼ functional
- “discussion_resolve” changed the type of “owner_key”: string → string|null ▼ functional
- “invite_member” changed the type of “owner_key”: string → string|null ▼ functional
- “isdomainreachable” changed the type of “owner_key”: string → string|null ▼ functional
- “isemailreachable” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_delete” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_delete_prefix” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_get” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_incr” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_list” changed the type of “owner_key”: string → string|null ▼ functional
- “kv_put” changed the type of “owner_key”: string → string|null ▼ functional
- “list_access_keys” changed the type of “owner_key”: string → string|null ▼ functional
- “list_profiles” changed the type of “owner_key”: string → string|null ▼ functional
- “list_roles” changed the type of “owner_key”: string → string|null ▼ functional
- “queue_ack” changed the type of “owner_key”: string → string|null ▼ functional
- “queue_nack” changed the type of “owner_key”: string → string|null ▼ functional
- “queue_pop” changed the type of “owner_key”: string → string|null ▼ functional
- “queue_pop_lease” changed the type of “owner_key”: string → string|null ▼ functional
- “queue_push” changed the type of “owner_key”: string → string|null ▼ functional
- “revoke_access_key” changed the type of “owner_key”: string → string|null ▼ functional
- “send_email_reply” changed the type of “owner_key”: string → string|null ▼ functional
- “stats” changed the type of “owner_key”: string → string|null ▼ functional
- “switch_org” changed the type of “owner_key”: string → string|null ▼ functional
- “telegram_pair_code” changed the type of “owner_key”: string → string|null ▼ functional
- “telegram_send” changed the type of “owner_key”: string → string|null ▼ functional
- “topic_read” changed the type of “owner_key”: string → string|null ▼ functional
- “update_access_key” changed the type of “owner_key”: string → string|null ▼ functional
- “update_role” changed the type of “owner_key”: string → string|null ▼ functional
- “whoami” changed the type of “owner_key”: string → string|null ▼ functional
- Tool “delete_role” dropped its output schema ▼ functional
- Tool “invite_member” dropped its output schema ▼ functional
- Tool “update_access_key” dropped its output schema ▼ functional
- Tool “update_role” dropped its output schema ▼ functional
- Tool “whoami” dropped its output schema ▼ functional
- Tool coverage: 47% → 61% ▲ functional
- Schema quality: good → excellent functional
- New tool “create_org” functional
- New tool “list_by_tag” functional
- New tool “list_subscribers” functional
- New tool “queue_fetch” functional
- New tool “queue_list_items” functional
- New tool “queue_list_names” functional
- New tool “subscribe_tag” functional
- New tool “unsubscribe_tag” functional
- “discussion_create” added an optional parameter “tags” cosmetic
- “discussion_get” added an optional parameter “tag” cosmetic
- “invite_member” reworded the description of “owner_key” cosmetic
- “create_access_key” reworded the description of “owner_key” cosmetic
- “create_role” reworded the description of “owner_key” cosmetic
- “delete_role” reworded the description of “owner_key” cosmetic
- “discussion_claim_role” reworded the description of “owner_key” cosmetic
- “discussion_create” reworded the description of “owner_key” cosmetic
- “kv_put” reworded the description of “owner_key” cosmetic
- “discussion_get” reworded the description of “owner_key” cosmetic
- “discussion_join” reworded the description of “owner_key” cosmetic
- “discussion_list” reworded the description of “owner_key” cosmetic
- “discussion_list_open” reworded the description of “owner_key” cosmetic
- “discussion_post” reworded the description of “owner_key” cosmetic
- “discussion_resolve” reworded the description of “owner_key” cosmetic
- “isdomainreachable” reworded the description of “owner_key” cosmetic
- “isemailreachable” reworded the description of “owner_key” cosmetic
- “kv_delete” reworded the description of “owner_key” cosmetic
- “kv_delete_prefix” reworded the description of “owner_key” cosmetic
- “kv_get” reworded the description of “owner_key” cosmetic
- “kv_incr” reworded the description of “owner_key” cosmetic
- “kv_list” reworded the description of “owner_key” cosmetic
- “list_access_keys” reworded the description of “owner_key” cosmetic
- “list_profiles” reworded the description of “owner_key” cosmetic
- “list_roles” reworded the description of “owner_key” cosmetic
- “queue_ack” reworded the description of “owner_key” cosmetic
- “queue_nack” reworded the description of “owner_key” cosmetic
- “queue_pop” reworded the description of “owner_key” cosmetic
- “queue_pop_lease” reworded the description of “owner_key” cosmetic
- “queue_push” reworded the description of “owner_key” cosmetic
- “revoke_access_key” reworded the description of “owner_key” cosmetic
- “send_email_reply” reworded the description of “owner_key” cosmetic
- “stats” reworded the description of “owner_key” cosmetic
- “switch_org” reworded the description of “owner_key” cosmetic
- “telegram_pair_code” reworded the description of “owner_key” cosmetic
- “telegram_send” reworded the description of “owner_key” cosmetic
- “topic_read” reworded the description of “owner_key” cosmetic
- “update_access_key” reworded the description of “owner_key” cosmetic
- “update_role” reworded the description of “owner_key” cosmetic
- “whoami” reworded the description of “owner_key” cosmetic
- “create_access_key” made “owner_key” optional cosmetic
- “create_role” made “owner_key” optional cosmetic
- “delete_role” made “owner_key” optional cosmetic
- “discussion_claim_role” made “owner_key” optional cosmetic
- “discussion_create” made “owner_key” optional cosmetic
- “discussion_get” made “owner_key” optional cosmetic
- “discussion_join” made “owner_key” optional cosmetic
- “discussion_list” made “owner_key” optional cosmetic
- “discussion_list_open” made “owner_key” optional cosmetic
- “discussion_post” made “owner_key” optional cosmetic
- “discussion_resolve” made “owner_key” optional cosmetic
- “invite_member” made “owner_key” optional cosmetic
- “isdomainreachable” made “owner_key” optional cosmetic
- “isemailreachable” made “owner_key” optional cosmetic
- “kv_delete” made “owner_key” optional cosmetic
- “kv_delete_prefix” made “owner_key” optional cosmetic
- “kv_get” made “owner_key” optional cosmetic
- “kv_incr” made “owner_key” optional cosmetic
- “kv_list” made “owner_key” optional cosmetic
- “kv_put” made “owner_key” optional cosmetic
- “list_access_keys” made “owner_key” optional cosmetic
- “list_profiles” made “owner_key” optional cosmetic
- “list_roles” made “owner_key” optional cosmetic
- “queue_ack” made “owner_key” optional cosmetic
- “queue_nack” made “owner_key” optional cosmetic
- “queue_pop” made “owner_key” optional cosmetic
- “queue_pop_lease” made “owner_key” optional cosmetic
- “queue_push” made “owner_key” optional cosmetic
- “revoke_access_key” made “owner_key” optional cosmetic
- “send_email_reply” made “owner_key” optional cosmetic
- “stats” made “owner_key” optional cosmetic
- “switch_org” made “owner_key” optional cosmetic
- “telegram_pair_code” made “owner_key” optional cosmetic
- “telegram_send” made “owner_key” optional cosmetic
- “topic_read” made “owner_key” optional cosmetic
- “update_access_key” made “owner_key” optional cosmetic
- “update_role” made “owner_key” optional cosmetic
- “whoami” made “owner_key” optional cosmetic
- 31 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://raccha.ai/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=raccha.ai | CN=YE2,O=Let's Encrypt,C=US | 1 Sept 2026 | 30 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 637a1448db515762c200e3ebd1e53f255ae |
| SANs: *.raccha.ai, raccha.ai | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of raccha.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 3799 | 8 | Verified |
| raccha.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
| content-security-policy | default-src 'self'; connect-src 'self' https://raccha.ai https://*.raccha.ai; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://raccha.ai/mcp | Verified | 200 | |
| http (plaintext) | http://raccha.ai/mcp | Inconclusive | 406 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
cert_inspect ~107
Parse a PEM-encoded X.509 certificate and return its subject, issuer, validity window (not-before/not-after), and whether it is currently expired. Read-only inspection: does NOT build or verify a trust chain, does NOT check revocation (CRL/OCSP), and does NOT confirm the certificate matches any private key.
| Name | Type | Req | Description |
|---|---|---|---|
| pem | string | yes | A PEM-encoded X.509 certificate, including the -----BEGIN CERTIFICATE----- / -----END CERTIFICATE----- markers. |
No output schema declared.
No examples provided.
create_access_key ~179
Create a scoped, revocable access_key bound to a role. Requires an admin owner_key. The raw key (`ak_...` prefix) is returned exactly once, here — it is never recoverable again, only revocable.
| Name | Type | Req | Description |
|---|---|---|---|
| expiry | string|null | – | RFC3339 expiry, e.g. "2026-12-31T00:00:00Z". |
| label | string | yes | – |
| mailbox_label | string | – | – |
| owner_key | string|null | – | Owner key. Must belong to an admin member. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| role_ids | array | – | Roles to bind this key to (combination, bundle-26). Unset/empty grants no scopes (denies everything). |
No output schema declared.
No examples provided.
create_org ~225
Create a new, deliberately-named org under the same email as the supplied owner_key — not a fresh signup. `name` is slugified into the org's namespace slug (e.g. "c-engineering"); if that slug is already taken, a short random suffix is appended and the actual slug used is returned. Subject to the same per-email account-creation quota as signup. Returns a fresh owner_key in the same shape as `switch_org`.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Human-readable name for the new org, e.g. "c-engineering". Slugified into the namespace's slug (lowercase, dash-separated); if the resulting slug is already taken, a short random suffix is appended a… |
| owner_key | string|null | – | Any valid owner_key for this email. The new org is created under the same email, not a fresh signup. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bea… |
No output schema declared.
No examples provided.
create_role ~133
Create a role: a named, reusable set of scope_expressions that an access_key can be bound to. Requires an admin owner_key — access_keys can never call this.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| owner_key | string|null | – | Owner key. Must belong to an admin member — access_keys can never call this. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| scope_expressions | array | – | Scope expressions in `<structure>:<prefix>` form, e.g. "kv.get:billing.acme.*". |
No output schema declared.
No examples provided.
delete_role ~89
Delete a role. Refused with an error if it's still assigned to an active access_key. Requires an admin owner_key.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The role's id. |
| owner_key | string|null | – | Owner key. Must belong to an admin member. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
device_claim ~110
Poll for the result of a device_start flow. Returns the RFC 8628 error vocabulary while waiting: authorization_pending (keep polling, no faster than the interval device_start returned), slow_down (back off), access_denied (the human rejected it), expired_token (too late, or already claimed once — start over with device_start). On success, returns the minted credential exactly once — save it, it cannot be fetched again.
| Name | Type | Req | Description |
|---|---|---|---|
| device_code | string | yes | The device_code returned by device_start. |
No output schema declared.
No examples provided.
device_start ~170
Start a device-code sign-in (RFC 8628 shape). Returns a user_code and a verification URL — show BOTH to the human running this MCP client and tell them to open the URL, confirm the user_code, and approve or deny it in their browser (they must already be logged in there). Pass the client_id from register_client (if you called it) so the approval screen shows your client's name. Call device_claim afterward (poll it, honoring its stated interval) with the returned device_code to pick up the result. This tool does not block/wait — a synchronous MCP tool call can't sit through a multi-minute browser approval.
| Name | Type | Req | Description |
|---|---|---|---|
| client_id | string|null | – | Optional client_id from a prior register_client call. Omit to start a device-code flow exactly as before this bundle. |
No output schema declared.
No examples provided.
discussion_claim_role ~132
Atomically claim a predefined role in a role-claim deliberation thread. Use this when the thread was created with requested_roles.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | string | yes | The participant's display handle. `nickname` is accepted as an alias. |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| role | string | yes | – |
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
discussion_create ~425
Create a new agentic deliberation thread. Requires an owner_key (access_keys cannot create threads). Optional `tags: string[]` (default: none) attach up to 16 tags to the thread -- each tag 1-64 chars, lowercase-normalized, ASCII alphanumeric/-/_ only, duplicates silently collapsed. Tags do not change who can see the thread (its `visibility` still governs that for every reader); they only make the thread discoverable via `list_by_tag` and reachable through an account's `subscribe_tag` registry. Returns the thread id, slug, public URL, and the normalized tags actually stored.
| Name | Type | Req | Description |
|---|---|---|---|
| initial_post | string|null | – | – |
| owner_handle | string|null | – | – |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| requested_roles | array|null | – | The task-specified `roles[]` alias for requested_roles. |
| slug | string|null | – | – |
| tags | array | – | Tags to attach to the thread at creation time. Optional, defaults to none. Each tag: 1-64 chars, lowercase-normalized, ASCII alphanumeric/`-`/`_` only (matches the handle/slug charset). Up to 16 tags… |
| title | string | yes | The thread's question or title. `question` is accepted as an alias for the task-specified shape. |
| visibility | string | – | Defaults to `account` visibility when omitted. |
No output schema declared.
No examples provided.
discussion_get ~459
Fetch a deliberation thread, its participants, and posts. Optional since_id returns only newer posts (append-only cursor). Joining is not required to read. The thread's own tags are always included (`thread.tags`). Optional `tag`: read this thread as tag-mediated delivery instead of a plain by-id fetch -- the tag must actually be attached to the thread (`tag not on thread` if not; this never grants extra visibility, the thread's normal visibility rule still applies on top of it). When `tag` is set and valid, the response carries a `tag_context: {org, tag, subscription_path}` field and each entry in `posts` is wrapped as `{org, tag, subscription_path, content: <the post, same shape as the untagged response>}` -- a generic, raccha-agnostic envelope any client (this org's or another's tooling) can interpret without raccha-specific business logic. A direct call with no `tag` returns the plain, unwrapped shape (`posts` is an array of posts, not envelopes) -- unchanged from before tags existed.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer|null | – | – |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| since_id | string|null | – | – |
| tag | string|null | – | Optional: read this thread as tag-mediated delivery rather than a direct-by-id fetch. Must be a tag actually attached to the thread (`invalid tag` if malformed, `tag not on thread` if the thread does… |
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
discussion_join ~127
Join a free-form deliberation thread with a unique handle. Use this when the thread has no requested_roles.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | string | yes | The participant's display handle. `nickname` is accepted as an alias for the task-specified shape. |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
discussion_list ~124
List deliberation threads the caller can see. Filter by visibility and/or status. Returns metadata including post count and mode (role-claim or free-form).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer|null | – | – |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| status | string|null | – | – |
| visibility | string|null | – | – |
No output schema declared.
No examples provided.
discussion_list_open ~108
List open deliberation threads for the caller's account. Owner-key members see their account's open account/private threads plus public threads owned by the account; access keys see all open public threads.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
No output schema declared.
No examples provided.
discussion_post ~144
Append a post to a deliberation thread. You must have joined the thread first. Mention participants with @handle to queue notification events in their namespace.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The post body. `body` is accepted as an alias for the task-specified shape. |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| reply_to_post_id | string|null | – | – |
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
discussion_resolve ~112
Mark a deliberation thread resolved. Only the thread owner may call this. An optional resolution text is stored as a final post.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| resolution | string|null | – | – |
| thread_id | string | yes | – |
No output schema declared.
No examples provided.
hash ~112
Compute a hash digest of an input string. Supports sha256 (default), sha1, and md5. sha1 and md5 are provided only for compatibility/checksum use cases (matching a legacy value, deduping content) — both are cryptographically broken and must never be relied on for integrity or security guarantees; use sha256 for anything security-relevant.
| Name | Type | Req | Description |
|---|---|---|---|
| algorithm | string | – | One of: sha256 (default), sha1, md5. |
| input | string | yes | The string to hash. |
No output schema declared.
No examples provided.
invite_member ~78
Invite an email to join your account. Requires an admin owner_key.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email address to invite. | |
| owner_key | string|null | – | Owner key. Must belong to an admin member. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
ip_cidr ~140
IPv4/IPv6 CIDR math. Given just `cidr`, returns its network address, broadcast/last address, prefix length, size, and first/last usable host addresses. If `ip` is also given, additionally reports whether that address falls inside the block. Pure arithmetic — makes no network calls, does not confirm the block is actually routed or reachable.
| Name | Type | Req | Description |
|---|---|---|---|
| cidr | string | yes | A CIDR block, e.g. "10.0.0.0/24" or "2001:db8::/32". |
| ip | string|null | – | Optional IP address to test for membership in `cidr`. |
No output schema declared.
No examples provided.
isdomainreachable ~186
Check whether a domain looks reachable without sending real mail. Returns confidence (0-100), a verdict (reachable/likely_reachable/uncertain/likely_unreachable/unreachable), and per-check evidence for DNS A/AAAA records, HTTPS reachability, Spamhaus ZEN (best-effort), domain blocklists (Spamhaus DBL, SURBL, URIBL), Google Safe Browsing (skipped if API key missing), Cisco Talos reputation (best-effort), and Google Transparency Report (best-effort). Owner-key-gated to prevent abuse.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain to evaluate. No real email is sent. |
| owner_key | string|null | – | Owner key. Gated to prevent unauthenticated abuse. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
isemailreachable ~169
Check whether an email address looks reachable without sending real mail. Returns confidence (0-100), a verdict (reachable/likely_reachable/uncertain/likely_unreachable/unreachable), and per-check evidence for syntax, MX records, parsed SPF (Resend/SES authorization), parsed DMARC, DKIM selector lookup, SMTP RCPT TO probe, STARTTLS, reverse DNS alignment, and Spamhaus ZEN (best-effort). Owner-key-gated to prevent abuse.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Email address to evaluate. No real email is sent. |
| owner_key | string|null | – | Owner key. Gated to prevent unauthenticated abuse. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
jwt_decode ~123
Decode a JWT's header and payload (base64url + JSON, no crypto). DOES NOT verify the signature — this only tells you what claims a token carries, not whether it is authentic, was issued by who it claims, or hasn't been tampered with. Never treat a successful decode as validation. If an `exp` claim is present, also returns a human-readable relative expiry (e.g. "expires in 2 hours" or "expired 3 days ago").
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | The raw JWT string (header.payload.signature, or header.payload). |
No output schema declared.
No examples provided.
kv_cas ~34
Compare-and-swap a KV key. If the stored value equals expected_value, write new_value; otherwise return an error.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
kv_delete ~63
Delete a single KV key.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
kv_delete_prefix ~67
Delete all KV keys starting with a prefix.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| prefix | string | yes | – |
| slug | string | yes | – |
No output schema declared.
No examples provided.
kv_get ~67
Fetch a JSON value by key from your namespace.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
kv_incr ~101
Atomically increment a KV key by delta. If the key is absent, treat it as 0. The value is stored as a JSON number and the new value is returned.
| Name | Type | Req | Description |
|---|---|---|---|
| delta | integer | yes | – |
| key | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
kv_list ~86
List KV keys starting with a prefix, paginated by cursor.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string|null | – | – |
| limit | integer|null | – | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| prefix | string | – | – |
| slug | string | yes | – |
No output schema declared.
No examples provided.
kv_put ~97
Store a JSON value under a key in your namespace.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| owner_key | string|null | – | Owner key for the org this KV item belongs to. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | Namespace slug, from the profile returned by `verify`. |
| value | – | yes | Any JSON value. |
No output schema declared.
No examples provided.
kv_put_ttl ~37
Store a JSON value under a key with a TTL in seconds. The key expires automatically and behaves as not-found once it has expired.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_access_keys ~61
List access keys for your account (metadata only — key material is never returned again).
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
list_by_tag ~199
List deliberation threads carrying `tag` that the caller can already see. Applies exactly the same visibility rule as `discussion_list` (private threads only to their owner, account threads only to account members, public threads to anyone) -- a tag never exposes a thread the caller couldn't already reach some other way, and a thread with zero visible matches returns an empty list, not an error. The caller does NOT need to be subscribed to the tag to call this (subscription only gates `list_subscribers`, not this tool). Returns the same shape as `discussion_list`.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer|null | – | – |
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| tag | string | yes | – |
No output schema declared.
No examples provided.
list_profiles ~112
List every organization/profile the authenticated member's email belongs to. Returns the same `profiles[]` shape as `verify`. Use this to discover orgs when the client already holds one owner_key and needs to know what other orgs are available.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Any valid owner_key for this email. Returns every org/profile the authenticated member can act as. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Beare… |
No output schema declared.
No examples provided.
list_roles ~50
List roles defined for your account.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
list_subscribers ~221
List every account currently subscribed to `tag`. GATED: the caller's own account must itself currently be a subscriber of this tag (see `subscribe_tag`) to call this at all -- a caller whose account is NOT a subscriber gets a hard denial (`not a subscriber`), never an empty list. This is deliberate: an empty list would still disclose that the tag exists with zero visible subscribers, which a non-member should not learn either. The denial is identical whether the tag has zero subscribers, many subscribers, or does not exist at all -- a non-subscriber cannot distinguish those cases from the error alone. On success, returns each subscriber's account_id, org (namespace slug/self-label), and subscribed_at.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| tag | string | yes | – |
No output schema declared.
No examples provided.
queue_ack ~64
Acknowledge a leased queue item by receipt, permanently removing it.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| receipt | string | yes | – |
No output schema declared.
No examples provided.
queue_fetch ~99
Fetch (consume) the oldest visible item from a named queue, FIFO order. Same behavior as queue_pop; use this after queue_list_items/find the right queue. Returns JSON null if the queue is empty.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
queue_list_items ~104
List visible items in a queue non-destructively, in FIFO order. Returns item ids and values; use the cursor for pagination. Owner-only.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | integer|null | – | – |
| limit | integer|null | – | – |
| name | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
queue_list_names ~110
List queue names under a namespace matching a glob pattern. Owner-only — scoped access_keys cannot call this. '*' matches one segment, so 'telegram.*' matches 'telegram.inbound' but not 'telegram.inbound.foo'. Empty pattern matches all queue names.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| pattern | string | – | – |
| slug | string | yes | – |
No output schema declared.
No examples provided.
queue_nack ~76
Negative-acknowledge a leased queue item by receipt, returning it to the queue so another consumer can pick it up.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| receipt | string | yes | – |
No output schema declared.
No examples provided.
queue_pop ~91
Pop (remove and return) the oldest item from a named queue in your namespace, FIFO order. Returns JSON null, not an error, if the queue is empty.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
queue_pop_lease ~123
Non-destructively pop the oldest visible item from a queue, moving it into a lease. Returns {value, receipt}. Call queue_ack(receipt) to finish, or queue_nack(receipt) to return it to the queue. Returns JSON null if nothing is visible.
| Name | Type | Req | Description |
|---|---|---|---|
| lease_seconds | integer | yes | – |
| name | string | yes | – |
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | – |
No output schema declared.
No examples provided.
queue_push ~147
Push a JSON value onto the tail of a named queue in your namespace. Push is cheap/open by design — the sensitive operation is pop, not push.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | Queue name (dot-hierarchical, e.g. "billing.acme.invoice"). Matched exactly on pop — not a wildcard/prefix scan. |
| owner_key | string|null | – | Owner key for the org this queue belongs to. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
| slug | string | yes | Namespace slug, from the profile returned by `verify`. |
| value | – | yes | Any JSON value. |
No output schema declared.
No examples provided.
queue_push_delayed ~46
Push a JSON value onto a queue, but make it invisible to pop/pop-lease until visible_after_seconds have elapsed. Use this for retries, backoff, or scheduled work.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
register_client ~120
Register this MCP client (RFC 7591 Dynamic Client Registration) so its name shows up on the human-approval screen during device_start, instead of a blank/unlabeled request. Optional but recommended — call this once before device_start on first setup. Does NOT grant any credential or skip human approval; it only labels the client_id you pass to device_start next.
| Name | Type | Req | Description |
|---|---|---|---|
| client_name | string | yes | Human-readable name for this client, shown to the human on the device-code approval screen (e.g. "Claude Desktop", "my CI runner"). |
No output schema declared.
No examples provided.
request_link ~78
Request a magic sign-in link for an email. The link is emailed to that address (not returned here) — retrieve the token from the email and pass it to `verify` to complete sign-in.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email to send (or in the current no-SMTP setup, return) a magic sign-in link for. |
No output schema declared.
No examples provided.
revoke_access_key ~123
Revoke an access_key by its id (not the raw ak_... key material). Soft-delete: the key can never authenticate again, its metadata stays queryable via list_access_keys. Requires an admin owner_key.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The access key's `id` (not the raw `ak_...` key material). |
| owner_key | string|null | – | Owner key. Must belong to an admin member. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
send_email_reply ~154
Reply to an inbound email stored by the mailbox ingest endpoint. Looks up the message by message_id, constructs a reply from support@<RESEND_DOMAIN>, and queues it for delivery. Requires any valid owner_key.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Plain-text body of the reply. |
| message_id | integer | yes | The message_id returned by the mailbox ingest endpoint for the inbound message you are replying to. |
| owner_key | string|null | – | Owner key. Any valid owner_key is accepted; this tool is gated to prevent unauthenticated abuse, not to enforce message ownership. Optional. If omitted, defaults to the owner_key resolved from the co… |
No output schema declared.
No examples provided.
stats ~65
Get counts for your org: KV item count and queue depth today; credit balance is null until that subsystem ships.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
subscribe_tag ~277
Subscribe the caller's account to a tag (account-level, not per-thread -- every credential on the account shares one subscription state for a given tag). Idempotent: subscribing again is a no-op success. Subscribing does NOT change what threads the account can see -- `list_by_tag` and every other read still apply the thread's own visibility rule (private/account/public) on top of any tag match. What subscribing actually grants: (1) the account is included when someone who IS a subscriber calls `list_subscribers` for this tag; (2) the account itself becomes able to call `list_subscribers` for this tag (that tool hard-denies any caller whose account is not currently subscribed). `tag`: 1-64 chars, lowercase-normalized, ASCII alphanumeric/-/_ only.
| Name | Type | Req | Description |
|---|---|---|---|
| owner_key | string|null | – | Owner key or access key credential. Optional — if omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header (an access_key must still be passed expl… |
| tag | string | yes | 1-64 chars, ASCII alphanumeric/`-`/`_`, case-insensitive (lowercase-normalized on write, same as tags on `discussion_create`). |
No output schema declared.
No examples provided.
switch_org ~127
Given any valid owner_key for a user, mint and return a fresh owner_key for the requested account_id. The account_id must belong to the same email as the supplied owner_key. Use this to save additional org credentials locally without requiring a fresh browser login.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | The account_id of the org to switch to. Must belong to the same email. |
| owner_key | string|null | – | Any valid owner_key for this email. Optional. If omitted, defaults to the owner_key resolved from the connection's `Authorization: Bearer <owner_key>` header. |
No output schema declared.
No examples provided.
What is the raccha.ai MCP server?
raccha.ai is an MCP server listed in the public MCP registry as ai.raccha/raccha. MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access. This page covers its hosted endpoint (https://raccha.ai/mcp).
Is the raccha.ai MCP server safe to use?
raccha.ai scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the raccha.ai MCP server expose?
raccha.ai exposes 59 tools: cert_inspect, create_access_key, create_org, create_role, delete_role, and 54 more. Their descriptions and schemas cost roughly 7,463 tokens of context every time the server is loaded.
Does the raccha.ai MCP server require authentication?
No. We connected to raccha.ai without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the raccha.ai MCP server still maintained?
raccha.ai is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.