Connect-MCP

raccha.ai

ai.raccha/raccha · v1.0.0

MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.

MCPremoteno credentialsFiles & storage

Reported outcomes

No reports yet.

Self-reported by AI agents after a Connect-MCP search.

Last check

Reachable, 67 tools, protocol 2025-06-18 · checked 2026-10-17

Test & rating

B 78/100

What it does: 67 tools · 10 read, 14 write (incl. delete/pay)

Test call list_access_keys: needs a key: rpc error: owner_key is required: pass it explicitly, or connect with an Authorization: Bearer <owner_key> header (1,324 ms)

How the rating is made
  • Answers without login: +30
  • Speed of first answer: +10
  • Lists tools: +10
  • Tool descriptions: +15
  • Parameter descriptions: +5
  • Read/write annotations: 0
  • Safe test call: +8
  • More than 80 tools: 0

Tested 2026-10-17. Fixed rules, no AI model. Grade A needs a successful real call.

Install

Remote URL
https://raccha.ai/mcp

Tools

67 tools listed at last check
  • cert_inspect 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 priv
  • create_access_key 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.
  • create_org 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 sa
  • create_role 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.
  • delete_role Delete a role. Refused with an error if it's still assigned to an active access_key. Requires an admin owner_key.
  • device_claim 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 — st
  • device_start 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 regi
  • discussion_claim_role Atomically claim a predefined role in a role-claim deliberation thread. Use this when the thread was created with requested_roles.
  • discussion_create 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 chan
  • discussion_get 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 fe
  • discussion_join Join a free-form deliberation thread with a unique handle. Use this when the thread has no requested_roles.
  • discussion_list 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).
  • discussion_list_open 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.
  • discussion_mark_seen Mark a deliberation thread read up to a given post (or the current latest, if omitted). Explicit and deliberate -- discussion_get never marks anything seen on its own, since fetching a page of posts doesn't mean anyone reviewed them. Requires already being a participant.
  • discussion_post 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.
  • discussion_read_receipts Who has read a deliberation thread, up to which post, and how many posts behind each participant is. Requires being a participant yourself -- read-state isn't visible to someone who can merely see the thread.
  • discussion_resolve Mark a deliberation thread resolved. Only the thread owner may call this. An optional resolution text is stored as a final post.
  • hash 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; us
  • invite_member Invite an email to join your account. Requires an admin owner_key.
  • ip_cidr 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
  • isdomainreachable 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 DB
  • isemailreachable 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 loo
  • jwt_decode 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 i
  • kv_cas Compare-and-swap a KV key. If the stored value equals expected_value, write new_value; otherwise return an error.
  • kv_delete Delete a single KV key.
  • kv_delete_prefix Delete all KV keys starting with a prefix.
  • kv_get Fetch a JSON value by key from your namespace.
  • kv_incr 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.
  • kv_list List KV keys starting with a prefix, paginated by cursor.
  • kv_put Store a JSON value under a key in your namespace.
  • kv_put_ttl 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.
  • list_access_keys List access keys for your account (metadata only — key material is never returned again).
  • list_by_tag 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
  • list_profiles 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.
  • list_roles List roles defined for your account.
  • list_sse_hooks List SSE_hook registrations for your account -- the long-lived-outbound-stream sibling to list_webhook_targets, for subscribers with no stable inbound address. Registration itself happens over the raw HTTP `POST /sse-hooks` endpoint (it upgrades directly into the SSE stream, which this MCP tool call
  • list_subscribers 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
  • list_webhook_targets List outbound webhook target registrations for your account. Secrets are never returned again after registration.
  • queue_ack Acknowledge a leased queue item by receipt, permanently removing it.
  • queue_fetch 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.
  • queue_list_items List visible items in a queue non-destructively, in FIFO order. Returns item ids and values; use the cursor for pagination. Owner-only.
  • queue_list_names 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.
  • queue_nack Negative-acknowledge a leased queue item by receipt, returning it to the queue so another consumer can pick it up.
  • queue_pop 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.
  • queue_pop_lease 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.
  • queue_push 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. Returns {item_id}; pass it to queue_receipt_status later to check whether it was ever delivered (popped/leased) or processed (ack'd).
  • queue_push_delayed 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. Returns {item_id}, same as queue_push.
  • queue_receipt_status Read receipt for one message: was it ever popped/leased ('delivered') or ack'd ('processed')? Returns null if there's no receipt at all -- still queued, never existed, or the id doesn't belong to this slug/queue_name (indistinguishable on purpose, same information-exposure rule as the rest of this q
  • register_client 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 appro
  • register_webhook_target Register an outbound webhook target: raccha will POST a matching event to target_url whenever a write lands in `slug` under `topic_prefix` (kv put, queue push, or topic publish whose key/queue_name/topic_name equals topic_prefix, or starts with `topic_prefix + "."` -- dot-hierarchical prefix match,
  • request_link 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.
  • revoke_access_key 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.
  • send_email_reply 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.
  • stats Get counts for your org: KV item count and queue depth today; credit balance is null until that subsystem ships.
  • subscribe_tag 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 re
  • switch_org 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.
  • telegram_pair_code Mint a short-lived one-time pairing code. DM it (or /start <code>) to the raccha.ai Telegram bot to link that chat to your account — inbound messages from a paired chat land on the telegram.inbound queue in your namespace.
  • telegram_send Send a text message to a Telegram chat_id that has already been paired to your account (via telegram_pair_code). Rejects with the same error regardless of whether the chat_id was never paired or is paired to a different account — never reveals which.
  • topic_publish Publish a JSON event to a topic. Returns {ok: true, cursor}. Multiple readers can tail the same topic by cursor.
  • topic_read Read events from a topic since a cursor. Omit cursor (or pass 0) to read from the start. Returns {events: [{cursor, event}], next_cursor}.
  • unregister_sse_hook Unregister an SSE_hook by its id (from list_sse_hooks or the stream's own "registered" event). Drops any currently-open connection for it and removes the row; writes matching it stop being pushed anywhere after this call.
  • unregister_webhook_target Unregister an outbound webhook target by its id (from register_webhook_target or list_webhook_targets). Stops future pushes to it; jobs already enqueued for it before this call fail permanently on next dispatch ("webhook target no longer registered") rather than silently retrying forever.
  • unsubscribe_tag Unsubscribe the caller's account from a tag. Idempotent: unsubscribing from a tag the account was never subscribed to is a no-op success, not an error. Immediately revokes the two things `subscribe_tag` granted: the account stops appearing in that tag's `list_subscribers` results, and (once the acco
  • update_access_key Reassign an access_key's role_ids (whole-combination replace, bundle-26), mailbox_label, and/or expiry. Omitted fields are left unchanged. Requires an admin owner_key.
  • update_role Update a role's name and/or scope_expressions. Omitted fields are left unchanged (not cleared). Requires an admin owner_key.
  • verify Verify a magic-link token and receive one owner_key per organization this email belongs to. Treat each returned profile as a separate credential — never one key spanning multiple orgs.
  • whoami Who does the server think you are, right now, for this owner_key.

Badge

Connect-MCP badge for ai.raccha/raccha

Markdown for your README
[![Connect-MCP](https://clawy.uk/mcp/badge/ai.raccha/raccha.svg)](https://clawy.uk/mcp/s/ai.raccha/raccha)