MCP Server

Agentic Endpoints

com.oliverkiss/agentic-endpoints

What this MCP does

Offers pay-per-call utilities for text compression, web scraping, PDF parsing, meeting transcript storage and search, encrypted secret vaults, idempotency, and payment verification.

compress
Compress text to a token budget
Reduce text to fit a token budget, preserving whole sentences and reporting before/after token estimates. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'Text to compress'}, 'strategy': {'enum': ['extractive', 'truncate'], 'type': 'string', 'description': 'Compression strategy (default extractive)'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'target_tokens': {'type': 'integer', 'description': 'Approximate token budget'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['original_length', 'compressed_length', 'ratio', 'text'], 'properties': {'text': {'type': 'string', 'description': 'The compressed text'}, 'ratio': {'type': 'number', 'description': 'compressed_length / original_length. Lower is more aggressive.'}, 'strategy': {'type': 'string', 'description': 'Strategy applied, echoing your request'}, 'original_length': {'type': 'number', 'description': 'Input length in characters'}, 'compressed_length': {'type': 'number', 'description': 'Output length in characters'}}}
credits_balance
Check how much credit a token has left
Free. Reports the remaining balance on a credit token so you can tell 'out of credit' apart from 'the call failed', which otherwise look identical from the outside. This tool is free; no payment is required.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['credit_token'], 'properties': {'credit_token': {'type': 'string', 'description': 'The credit token to check'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['balance_usd'], 'properties': {'currency': {'type': 'string', 'description': "Always 'USD'"}, 'balance_usd': {'type': 'string', 'description': 'Credit remaining, in dollars'}, 'balance_micros': {'type': 'number', 'description': 'Credit remaining in integer micro-dollars, the authoritative figure'}}}
credits_trial
Get free credit to try the paid tools
Free, and the first tool to call if any other tool has told you payment is required. Returns a credit_token carrying $0.10 of credit — roughly twenty calls — with no wallet, no signature, no account and no email. Pass the returned token as the `credit_token` argument to any paid tool and it will run without an x402 payment. One allowance per caller: asking again returns the same token and whatever balance is left on it, never a refill. When it runs out, buy more with the /credits/buy endpoint. This tool is free; no payment is required.
Idempotent
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['credit_token', 'balance_usd', 'trial', 'exhausted'], 'properties': {'next': {'type': 'string', 'description': 'What to do when it runs out'}, 'note': {'type': 'string', 'description': 'Why a second request returns the same token rather than more credit'}, 'trial': {'type': 'boolean', 'description': 'Always true; distinguishes this from purchased credit'}, 'usage': {'type': 'string', 'description': 'How to spend the token'}, 'exhausted': {'type': 'boolean', 'description': 'True when the allowance is spent. Asking again will not refill it, so buy credit or pay per call.'}, 'balance_usd': {'type': 'string', 'description': 'Credit remaining, in dollars'}, 'granted_usd': {'type': 'string', 'description': 'Size of the one-off allowance'}, 'credit_token': {'type': 'string', 'description': 'The token to pass as `credit_token` to any paid tool. Shown here and derivable again from the same caller, but not recoverable from us.'}}}
meetings_get
Read one meeting in full
Fetch a single meeting by meeting_id, including its full transcript when it was imported as queryable. Use this after meetings_search has identified the meeting you want. A 'content_missing' status means the record exists but its stored text could not be found -- that is a broken record, not an empty meeting, so do not report it as one. Costs $0.005 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token', 'meeting_id'], 'properties': {'namespace': {'type': 'string', 'description': 'Isolation scope holding your meetings'}, 'meeting_id': {'type': 'string', 'description': 'Returned by meetings_import or meetings_search'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'meeting_id'], 'properties': {'title': {'type': 'string', 'description': 'Meeting title'}, 'status': {'type': 'string', 'description': "'ok' on success"}, 'ciphertext': {'type': 'string', 'description': 'Client-encrypted transcript, for private meetings'}, 'meeting_id': {'type': 'string', 'description': 'Identifier of the meeting'}, 'transcript': {'type': 'string', 'description': 'Plaintext transcript, for queryable meetings'}, 'visibility': {'type': 'string', 'description': "'queryable' or 'private'"}}}
meetings_import
Import a meeting transcript
Store a transcript so it can be searched later. Accepts a raw WebVTT or SRT export straight from Zoom, Teams, Meet or a notetaker -- you do NOT need to strip timestamps or parse it first, and cues split across timing boundaries are merged so phrases still match. `visibility` is a required decision and cannot be guessed for you: 'queryable' stores plaintext, indexes it, and means this service can read it; 'private' stores ciphertext you encrypted yourself, which is unreadable here and therefore NEVER searchable. Send `transcript` for queryable and `ciphertext` for private -- the mismatched combinations are refused rather than silently doing the wrong thing. The first import into a namespace returns a namespace_token shown exactly once; save it or the namespace is unrecoverable. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Input schema
{'type': 'object', 'required': ['namespace'], 'properties': {'title': {'type': 'string', 'description': 'Human-readable meeting title'}, 'source': {'type': 'string', 'description': 'Optional hint about the export format. Ignored if it disagrees with the file: WebVTT and SRT are detected from the content itself, unpacked into speaker-attributed text, and any speakers found are added to participants. Plain text is stored verbatim.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope, e.g. my-meetings-<uuid>'}, 'ciphertext': {'type': 'string', 'description': "Client-side encrypted transcript. Only valid with visibility 'private'."}, 'transcript': {'type': 'string', 'description': "Plaintext transcript. Only valid with visibility 'queryable'."}, 'visibility': {'type': 'string', 'description': "'queryable' (plaintext, searchable, readable by this service) or 'private' (ciphertext, never searchable). Defaults to private."}, 'occurred_at': {'type': 'string', 'description': 'ISO-8601 time the meeting happened'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'participants': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional attendees'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'meeting_id'], 'properties': {'note': {'type': 'string', 'description': 'Present alongside a newly issued namespace_token'}, 'status': {'type': 'string', 'description': "'imported' on success"}, 'meeting_id': {'type': 'string', 'description': 'Identifier for later meetings_get calls'}, 'searchable': {'type': 'boolean', 'description': 'False for private meetings, which are never searchable'}, 'size_bytes': {'type': 'number', 'description': 'Stored size'}, 'visibility': {'type': 'string', 'description': "'queryable' or 'private'"}, 'namespace_token': {'type': 'string', 'description': 'Issued only on the first import into a namespace, shown exactly once'}}}
meetings_list
List your meetings
List the meetings in a namespace newest first, with titles, dates, participants and whether each one is searchable. Never returns transcripts. Useful for orienting before a search, and for finding meetings that are private and therefore invisible to meetings_search. Costs $0.005 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token'], 'properties': {'limit': {'type': 'integer', 'description': 'Max results, 1-500 (default 100)'}, 'namespace': {'type': 'string', 'description': 'Isolation scope holding your meetings'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'count', 'meetings'], 'properties': {'count': {'type': 'number', 'description': 'Number of meetings returned'}, 'status': {'type': 'string', 'description': "'ok' on success"}, 'meetings': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Meeting title'}, 'meeting_id': {'type': 'string', 'description': 'Identifier'}, 'searchable': {'type': 'boolean', 'description': 'Whether this meeting can be searched'}, 'visibility': {'type': 'string', 'description': "'queryable' or 'private'"}}}}}}
meetings_search
Search your meeting transcripts
Ask a question across every meeting you have imported as queryable, and get back ranked excerpts with the meeting they came from. This is the tool to use when the user refers to something that was said, agreed, or decided in a call -- 'what did we decide about pricing', 'who owned the migration', 'when did we say we would ship'. Returns 'searched_meetings' and 'private_meetings_skipped': meetings imported as private are encrypted and CANNOT be searched, so if searched_meetings is 0 an empty result means nothing was searched, NOT that the topic was never discussed. Use meetings_get to read a full transcript once you have found the right meeting. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token', 'query'], 'properties': {'limit': {'type': 'integer', 'description': 'Max results, 1-50 (default 10)'}, 'query': {'type': 'string', 'description': 'FTS5 match expression. Use quotes for phrases, e.g. "budget review". Prefer a few distinctive words over a whole sentence.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope holding your meetings'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'count', 'matches'], 'properties': {'count': {'type': 'number', 'description': 'Number of matches returned'}, 'query': {'type': 'string', 'description': 'The match expression that was run'}, 'status': {'type': 'string', 'description': "'ok' on a successful search"}, 'matches': {'type': 'array', 'items': {'type': 'object', 'properties': {'title': {'type': 'string', 'description': 'Meeting title'}, 'excerpt': {'type': 'string', 'description': 'Matching passage'}, 'meeting_id': {'type': 'string', 'description': 'Pass to meetings_get to read the full transcript'}}}, 'description': 'Ranked excerpts, best first'}, 'searched_meetings': {'type': 'number', 'description': 'How many meetings were actually searched. If 0, an empty result means nothing was searchable, NOT that the topic was never discussed.'}, 'private_meetings_skipped': {'type': 'number', 'description': 'Encrypted meetings that could not be searched'}}}
meetings_summarize
Answer a question from your meetings
Ask a plain-language question and get a written answer grounded in the user's own meeting transcripts, with the meeting id cited after each claim. Prefer this over meetings_search when the user wants an ANSWER ('what did we decide about pricing?', 'who owned the migration?') rather than a list of excerpts to read themselves. Pass the question as the user asked it -- this is NOT FTS5 syntax, and the terms actually searched come back as `terms` so you can check the retrieval. IMPORTANT: a 'no_matches' status means no answer was generated, and 'searched_meetings': 0 means every meeting is private and NOTHING was read -- neither is evidence the topic was never discussed, and you must not report it as such. Meetings imported as private are encrypted and can never contribute to an answer; `private_meetings_skipped` says how many were left out. A 'truncated' meeting in `consulted` had only part of its transcript read, so its silence on a point is not evidence either. Costs $0.050 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token', 'question'], 'properties': {'limit': {'type': 'integer', 'description': 'Max meetings to consult, 1-8 (default 5)'}, 'question': {'type': 'string', 'description': 'The question in plain language, as the user asked it. Not a search expression.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope holding your meetings'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status'], 'properties': {'model': {'type': 'string', 'description': 'The model that produced the answer'}, 'terms': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The search terms derived from the question'}, 'answer': {'type': ['string', 'null'], 'description': 'The grounded answer with [meeting_id] citations, or null when nothing was summarised.'}, 'status': {'type': 'string', 'description': "'ok' when an answer was generated. 'no_matches', 'unusable_question' and 'content_missing' all mean NO answer was produced and must not be read as the topic being absent."}, 'question': {'type': 'string', 'description': 'The question as asked'}, 'consulted': {'type': 'array', 'items': {'type': 'object', 'required': ['meeting_id', 'chars_used', 'truncated'], 'properties': {'title': {'type': 'string', 'description': 'Meeting title'}, 'truncated': {'type': 'boolean', 'description': 'True when only part of the transcript was read, so its silence on a point is not evidence'}, 'chars_used': {'type': 'number', 'description': 'Characters of this transcript given to the model'}, 'meeting_id': {'type': 'string', 'description': 'Pass to meetings_get to read the full transcript'}, 'occurred_at': {'type': 'string', 'description': 'ISO-8601 time the meeting happened, if known'}}}, 'description': 'The meetings the answer was actually built from'}, 'ai_generated': {'type': 'boolean', 'description': 'True: `answer` was written by an AI model'}, 'searched_meetings': {'type': 'number', 'description': 'Queryable meetings available to search. 0 means nothing was read.'}, 'private_meetings_skipped': {'type': 'number', 'description': 'Encrypted meetings that could not contribute to the answer'}}}
once_key_claim
Claim an action exactly once
Atomic idempotency witness. Claims a {namespace, action_key} pair exactly once, so a fleet of agents cannot perform the same side effect twice. Call this BEFORE any non-idempotent action such as sending an email, charging a card, or posting an order. Returns one of: 'claimed' — you won, do the work, then call once_key_complete; 'in_progress' — another agent holds a live lease, wait retry_after seconds and do NOT do the work; 'duplicate' — already done, and the 'result' field carries the original outcome, so use it instead of repeating the work; 'held' — another agent claimed this key, set no lease, and has NOT completed it: there is no result and there may never be one, so do NOT do the work and do NOT treat it as done, because the key stays locked until expires_at; 'conflict' — the same key was claimed with a different payload hash, so your key derivation is wrong. Backed by a strongly consistent Durable Object; this is not something an agent can safely reimplement locally. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'action_key'], 'properties': {'ttl': {'type': 'integer', 'description': 'Claim lifetime in seconds (default 86400)'}, 'lease_ttl': {'type': 'integer', 'description': 'Seconds you have to call once_key_complete before the claim is treated as abandoned and another agent may take it over. Set this if your work could crash partway. Omit it to hold the claim for the full ttl, which guarantees nothing else can ever run the side effect.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope, e.g. your application name'}, 'action_key': {'type': 'string', 'description': 'Stable identifier for the action being claimed'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'payload_sha256': {'type': 'string', 'description': 'Optional hash of the action payload. If it differs from the stored hash, the result is a conflict.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'action_key'], 'properties': {'note': {'type': 'string', 'description': 'Present alongside a newly issued namespace_token'}, 'result': {'description': "The recorded result, present when status is 'duplicate'."}, 'status': {'type': 'string', 'description': "'claimed' means you own the action and must perform it. 'duplicate' means someone already did: do NOT repeat the side effect, use `result` instead."}, 'receipt': {'type': 'string', 'description': 'Payment receipt'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'action_key': {'type': 'string', 'description': 'The key that was claimed'}, 'claimed_at': {'type': 'string', 'description': 'ISO-8601 claim time'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiry of the claim record'}, 'has_result': {'type': 'boolean', 'description': 'Distinguishes a recorded null result from no result at all'}, 'namespace_token': {'type': 'string', 'description': 'Issued only on the first claim in a namespace, shown exactly once'}, 'lease_expires_at': {'type': 'string', 'description': 'Call once_key_complete before this or the claim may be taken over'}}}
once_key_complete
Record the outcome of a claimed action
Free. Records the result of work you performed under a claim from once_key_claim. Every later claim of that action_key returns 'duplicate' along with this result, which is what lets another agent continue without repeating the side effect. Always call this after the work succeeds — a claim with no recorded result leaves every other agent unable to learn what happened. Completion is final and cannot be overwritten. This tool is free; no payment is required.
Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'action_key'], 'properties': {'ttl': {'type': 'integer', 'description': 'How long to retain the result, in seconds (default 86400)'}, 'result': {'description': 'Any JSON value describing the outcome, up to 16 KB serialized. Store large payloads elsewhere and record a reference.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope used when the key was claimed'}, 'action_key': {'type': 'string', 'description': 'The action_key you claimed'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'action_key'], 'properties': {'result': {'description': 'The stored result, replayed to later claimants.'}, 'status': {'type': 'string', 'description': "'completed'"}, 'action_key': {'type': 'string', 'description': 'The key whose outcome was recorded'}, 'expires_at': {'type': 'string', 'description': 'When the recorded result is discarded'}, 'has_result': {'type': 'boolean', 'description': 'Distinguishes a recorded null result from no result at all'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion time'}}}
once_key_release
Release a claim whose work failed
Free. Surrenders a claimed action_key so a retry can start immediately instead of waiting out the lease. Call this when the work you claimed fails. Refuses if the key was already completed, because releasing it would discard the recorded result and allow the side effect to run twice. This tool is free; no payment is required.
Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'action_key'], 'properties': {'namespace': {'type': 'string', 'description': 'Isolation scope used when the key was claimed'}, 'action_key': {'type': 'string', 'description': 'The action_key to release'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'action_key'], 'properties': {'status': {'type': 'string', 'description': "'released'"}, 'action_key': {'type': 'string', 'description': 'The key that was surrendered'}}}
pdf_parse
Extract text from a PDF
Extract text from a PDF by URL. Handles compressed streams, PDF 1.5+ object streams and ToUnicode CMaps, and reports encrypted or image-only documents honestly instead of returning garbage. Costs $0.020 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'HTTPS URL of the PDF'}, 'max_pages': {'type': 'integer', 'description': 'Optional page cap'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['url', 'page_count', 'pages'], 'properties': {'url': {'type': 'string', 'description': 'The PDF that was fetched'}, 'pages': {'type': 'array', 'items': {'type': 'object', 'properties': {'page': {'type': 'number', 'description': '1-based page number'}, 'text': {'type': 'string', 'description': 'Text on that page'}}}}, 'page_count': {'type': 'number', 'description': 'Pages extracted'}, 'extracted_at': {'type': 'string', 'description': 'ISO-8601 extraction time'}}}
scrape
Fetch a page as text or markdown
Fetch a URL and return readable text or markdown, optionally narrowed by CSS selector. Requests to private, loopback and link-local addresses are refused, and every redirect hop is re-validated. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Open world Idempotent
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'HTTPS URL to fetch'}, 'format': {'enum': ['text', 'markdown', 'html'], 'type': 'string', 'description': 'Output format (default text)'}, 'selector': {'type': 'string', 'description': 'Optional CSS selector to extract just part of the page'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['url', 'content'], 'properties': {'url': {'type': 'string', 'description': 'The page that was fetched'}, 'title': {'type': 'string', 'description': 'Document title, when the page has one'}, 'format': {'type': 'string', 'description': "'text', 'markdown' or 'html', echoing your request"}, 'content': {'type': 'string', 'description': 'Extracted content in the requested format'}, 'extracted_at': {'type': 'string', 'description': 'ISO-8601 fetch time'}}}
vault_delete
Delete a stored secret
Permanently delete an item. Requires the namespace_token. Costs $0.005 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'key', 'namespace_token'], 'properties': {'key': {'type': 'string', 'description': 'Item key'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'key'], 'properties': {'key': {'type': 'string', 'description': 'The key that was removed'}, 'status': {'type': 'string', 'description': "'deleted'"}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}}}
vault_exists
Test whether a key exists
Check for a key without returning its ciphertext. Requires the namespace_token. Costs $0.005 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'key', 'namespace_token'], 'properties': {'key': {'type': 'string', 'description': 'Item key'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['exists', 'key'], 'properties': {'key': {'type': 'string', 'description': 'The key that was checked'}, 'exists': {'type': 'boolean', 'description': 'Whether the key is present. Cheaper than a retrieve.'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}}}
vault_list
List the keys in a vault namespace
List the keys held in a namespace with their metadata: alg, size, timestamps. Never returns ciphertext — use vault_retrieve for that. Each item's updated_at is the version to pass back as if_match on a conditional store. Use this when you have stored secrets and need to know what is there. Costs $0.005 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token'], 'properties': {'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'count', 'items'], 'properties': {'count': {'type': 'number', 'description': 'Number of entries'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'alg': {'type': 'string', 'description': 'Algorithm label'}, 'key': {'type': 'string', 'description': 'Entry key'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation time'}, 'expires_at': {'type': ['string', 'null'], 'description': 'Expiry, or null'}, 'size_bytes': {'type': 'number', 'description': 'Stored size'}, 'updated_at': {'type': 'string', 'description': 'ISO-8601 last write'}}}, 'description': 'Metadata only — ciphertext is never included here'}, 'status': {'type': 'string', 'description': "'listed'"}}}
vault_retrieve
Retrieve an encrypted secret
Retrieve a previously stored ciphertext. Requires the namespace_token. Costs $0.02 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'key', 'namespace_token'], 'properties': {'key': {'type': 'string', 'description': 'Item key'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'key', 'ciphertext'], 'properties': {'alg': {'type': 'string', 'description': 'Algorithm label you supplied at store time'}, 'key': {'type': 'string', 'description': 'The key that was read'}, 'status': {'type': 'string', 'description': "'retrieved'"}, 'receipt': {'type': 'string', 'description': 'Payment receipt'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'ciphertext': {'type': 'string', 'description': 'Exactly the bytes you stored. Decrypt these yourself.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation time'}, 'expires_at': {'type': ['string', 'null'], 'description': 'Expiry, or null if it never expires'}, 'updated_at': {'type': 'string', 'description': 'ISO-8601 last write'}}}
vault_rotate_token
Rotate a vault namespace token
Free. Mints a new namespace_token and immediately invalidates the current one, which you must present to authorize the rotation. Do this whenever the token may have been exposed — a leaked token is otherwise permanent, unrevocable read and delete access to every secret in the namespace. There is no recovery if you lose the token. This tool is free; no payment is required.
Destructive
Input schema
{'type': 'object', 'required': ['namespace', 'namespace_token'], 'properties': {'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'namespace_token'], 'properties': {'notice': {'type': 'string', 'description': 'Human-readable warning that the old token is now invalid'}, 'status': {'type': 'string', 'description': "'rotated'"}, 'namespace_token': {'type': 'string', 'description': 'The new token, shown exactly once. The previous one stops working.'}}}
vault_store
Store an encrypted secret
Store client-side encrypted data. This service holds no key that could decrypt it and never sees plaintext; note that the item key, namespace, alg label and size ARE stored in the clear. The first store claims the namespace and returns a namespace_token shown only once — store it immediately, because it is required by every later call and cannot be recovered. Pass if_match with an item's updated_at for a compare-and-swap write, or if_absent to create only; either returns status 'precondition_failed' rather than silently clobbering a concurrent write. Costs $0.02 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Destructive Idempotent
Input schema
{'type': 'object', 'required': ['namespace', 'key', 'ciphertext'], 'properties': {'alg': {'type': 'string', 'description': 'Algorithm label recorded alongside the item (default aes-256-gcm)'}, 'key': {'type': 'string', 'description': 'Item key'}, 'ttl': {'type': 'integer', 'description': 'Item lifetime in seconds'}, 'if_match': {'type': 'string', 'description': "Only write if the item's current updated_at equals this. Use it whenever you are updating a value you read earlier, or a concurrent writer's change is lost silently."}, 'if_absent': {'type': 'boolean', 'description': "Only write if the key does not already exist. Fails with status 'precondition_failed' if it does."}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'ciphertext': {'type': 'string', 'description': 'Encrypt before sending. Plaintext here would be a mistake.'}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}, 'namespace_token': {'type': 'string', 'description': 'One-time token issued by the first call that claimed this namespace. Required for every later call.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status', 'key'], 'properties': {'alg': {'type': 'string', 'description': 'Algorithm label you supplied; the service never decrypts'}, 'key': {'type': 'string', 'description': 'The key that was written'}, 'status': {'type': 'string', 'description': "'stored'"}, 'receipt': {'type': 'string', 'description': 'Payment receipt'}, 'namespace': {'type': 'string', 'description': 'Isolation scope'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation time'}, 'expires_at': {'type': ['string', 'null'], 'description': 'Expiry, or null if it never expires'}, 'size_bytes': {'type': 'number', 'description': 'Stored ciphertext size'}, 'updated_at': {'type': 'string', 'description': 'ISO-8601 last write'}, 'namespace_token': {'type': 'string', 'description': 'Issued only on the first store into a namespace, shown exactly once'}}}
x402_verify
Check an x402 endpoint before paying it
Call this BEFORE authorising payment to any x402 endpoint you did not write yourself. It fetches the endpoint's live payment challenge and compares it against every observation previously made by every other caller, so you learn things a single agent cannot see on its own -- above all, whether the address receiving the money has changed. A 'critical' entry in `drift` means something determining where funds go (pay_to, network or asset) is different from before: stop and confirm out of band. Read the LIVE `charges` in preference to any directory listing, and pass what the listing claimed as `expect` to have the disagreement reported. IMPORTANT: 'status':'ok' is NOT an endorsement -- it only means a challenge was read and recorded. It cannot tell you whether the operator will deliver anything for your money. 'first_observation':true means there is no history at all, so an empty `drift` proves nothing. ALWAYS read `prior_criticals`: `drift` only compares against the last observation, so an endpoint that swapped its payee earlier shows an empty `drift` once that swap became the baseline -- a non-zero `prior_criticals` means it has changed where money goes before, and that is true no matter how clean today's look is. 'status':'unreachable' is not evidence of fraud and not evidence of health; do not pay on it either way. A null `price_usd` means the token's units are unknown here and the amount was NOT converted -- do not assume it is small. Costs $0.010 in USDC on Base, paid via the x402 protocol, or from a credit token — call credits_trial for free credit if you have neither.
Read only Idempotent
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Public HTTPS URL of the endpoint you are about to pay. Loopback and private-network addresses are refused rather than fetched.'}, 'expect': {'type': 'object', 'properties': {'asset': {'type': 'string', 'description': 'The token contract address you expected'}, 'pay_to': {'type': 'string', 'description': 'The address you expected to pay'}, 'network': {'type': 'string', 'description': "The chain you expected. A name like 'base' and its CAIP-2 form 'eip155:8453' are understood as the same chain, so an endpoint upgrading protocol version is not reported as a mismatch."}, 'max_price_usd': {'type': 'number', 'description': 'Report a mismatch if the live price exceeds this'}}, 'description': 'Optional. What a directory, README or earlier response led you to believe. Any disagreement with the live challenge is reported.', 'additionalProperties': False}, 'method': {'type': 'string', 'description': "How to provoke the challenge: 'POST' (default), 'GET' or 'HEAD'. Use the method you intend to pay for."}, 'credit_token': {'type': 'string', 'description': 'Optional. A credit token from credits_trial or /credits/buy. Supplying it pays for this call from that balance, so no x402 payment or wallet is needed.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['status'], 'properties': {'url': {'type': 'string', 'description': 'The URL that was checked'}, 'drift': {'type': ['array', 'null'], 'items': {'type': 'object', 'required': ['field', 'severity'], 'properties': {'to': {'type': 'string', 'description': 'Current value'}, 'from': {'type': 'string', 'description': 'Previous value'}, 'note': {'type': 'string', 'description': 'Why it matters'}, 'field': {'type': 'string', 'description': 'What changed'}, 'severity': {'type': 'string', 'description': "'critical' when something determining where money goes is new, 'warning' when it is worth knowing, 'info' when it is merely a fact"}}}, 'description': "Differences from the last observation. Any severity 'critical' entry changes where money goes. Null means no comparison was made at all, which is not the same as an empty array."}, 'advice': {'type': 'string', 'description': 'Plain-language statement of what was and was not established'}, 'status': {'type': 'string', 'description': "'ok' means a challenge was read -- NOT that the endpoint is trustworthy. 'refused' means the URL was never fetched. 'unreachable', 'redirected' and 'not_x402' all mean no challenge was obtained."}, 'charges': {'type': 'object', 'properties': {'asset': {'type': 'string', 'description': 'Token contract address'}, 'amount': {'type': 'string', 'description': "Amount in the asset's smallest unit, as a string"}, 'pay_to': {'type': 'string', 'description': 'Address that would receive the money'}, 'scheme': {'type': 'string', 'description': 'x402 payment scheme'}, 'network': {'type': 'string', 'description': 'Chain the payment settles on'}, 'price_usd': {'type': ['string', 'null'], 'description': "Amount in dollars, or null when the token's decimals are unknown here. Null means unconverted, not free."}}, 'description': 'What the endpoint declares it will charge, right now'}, 'last_seen': {'type': 'string', 'description': 'ISO-8601 time of the previous observation'}, 'reachable': {'type': 'boolean', 'description': 'Whether the endpoint answered at all'}, 'first_seen': {'type': 'string', 'description': 'ISO-8601 time this endpoint was first observed'}, 'mismatches': {'type': 'array', 'items': {'type': 'string'}, 'description': 'How the live challenge disagrees with what you expected'}, 'times_seen': {'type': 'number', 'description': 'How many observations exist, across all callers'}, 'http_status': {'type': 'number', 'description': 'Status code the endpoint returned'}, 'last_critical': {'type': ['object', 'null'], 'properties': {'at': {'type': 'string', 'description': 'ISO-8601 time the change was recorded'}, 'to': {'type': 'string', 'description': 'The value that replaced it'}, 'from': {'type': 'string', 'description': 'The previous value'}, 'field': {'type': 'string', 'description': 'What changed: pay_to, network or asset'}}, 'description': 'The most recent previously recorded critical change, or null if there has never been one.'}, 'prior_criticals': {'type': 'number', 'description': 'How many critical changes have EVER been recorded for this endpoint, not counting this call. `drift` only compares against the last observation, so once a change has been absorbed into the baseline it stops appearing there. A non-zero value here means this endpoint has changed where money goes before, even when `drift` is empty.'}, 'first_observation': {'type': 'boolean', 'description': 'True when there was no prior record, so an empty `drift` means nothing'}, 'matches_expectation': {'type': 'boolean', 'description': 'Present only when `expect` was supplied'}}}
Changed
compress
Sept. 27, 2026, 2:53 a.m.
Changed
scrape
Sept. 27, 2026, 2:53 a.m.
Changed
pdf_parse
Sept. 27, 2026, 2:53 a.m.
Changed
vault_list
Sept. 27, 2026, 2:53 a.m.
Changed
vault_exists
Sept. 27, 2026, 2:53 a.m.
Changed
once_key_claim
Sept. 27, 2026, 2:53 a.m.
Changed
meetings_list
Sept. 27, 2026, 2:53 a.m.
Changed
meetings_get
Sept. 27, 2026, 2:53 a.m.
Changed
meetings_import
Sept. 27, 2026, 2:53 a.m.
Changed
meetings_summarize
Sept. 27, 2026, 2:53 a.m.
Changed
x402_verify
Sept. 27, 2026, 2:53 a.m.
Changed
meetings_search
Sept. 27, 2026, 2:53 a.m.
Added
credits_balance
Sept. 17, 2026, 12:36 p.m.
Added
credits_trial
Sept. 17, 2026, 12:36 p.m.
Added
compress
Sept. 17, 2026, 12:36 p.m.
Added
scrape
Sept. 17, 2026, 12:36 p.m.
Added
pdf_parse
Sept. 17, 2026, 12:36 p.m.
Added
vault_rotate_token
Sept. 17, 2026, 12:36 p.m.
Added
vault_list
Sept. 17, 2026, 12:36 p.m.
Added
vault_delete
Sept. 17, 2026, 12:36 p.m.
Added
vault_exists
Sept. 17, 2026, 12:36 p.m.
Added
vault_retrieve
Sept. 17, 2026, 12:36 p.m.
Added
vault_store
Sept. 17, 2026, 12:36 p.m.
Added
once_key_release
Sept. 17, 2026, 12:36 p.m.
Added
once_key_complete
Sept. 17, 2026, 12:36 p.m.
Added
once_key_claim
Sept. 17, 2026, 12:36 p.m.
Added
meetings_list
Sept. 17, 2026, 12:36 p.m.
Added
meetings_get
Sept. 17, 2026, 12:36 p.m.
Added
meetings_import
Sept. 17, 2026, 12:36 p.m.
Added
meetings_summarize
Sept. 17, 2026, 12:36 p.m.