Card snapshot
mcp.crevio.co
·
2026-08-23 02:36:09 UTC
·
8cc7f7991ec25d9dbb49021b40c922b9ace22fd1faa3f1cf88ba5a271350bd15
This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.
{
"name": "crevio",
"title": "Crevio MCP Server",
"description": "Delegate work to the Crevio agent or call the Crevio API through code execution \u2014 products, customers, orders, and more",
"version": "2.0.0",
"url": "https://mcp.crevio.co/mcp",
"serverUrl": "https://mcp.crevio.co/mcp",
"serverInfo": {
"name": "crevio",
"version": "2.0.0"
},
"transport": {
"type": "streamable-http",
"endpoint": "https://mcp.crevio.co/mcp"
},
"protocol": "MCP Streamable HTTP",
"protocolVersion": "2026-07-28",
"supportedVersions": [
"2026-07-28"
],
"capabilities": {
"tools": {}
},
"tools": [
{
"name": "whoami",
"description": "Identify the account, user, and credential behind this connection, with plan, credit balance, rate limits, and the tools available. Call it first to verify the setup.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "ask_crevio",
"description": "Delegate a job to the Crevio agent and wait for the result. Starts a run that works your account through the Crevio API (products, customers, orders, email, socials, sites, research), waits up to timeout_seconds, and returns the run with the agent's final reply in `result`. For anything longer, use start_task and wait_for_run.",
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
},
{
"name": "start_chat",
"description": "Open a chat with the Crevio agent and queue a run, without waiting. Returns the run immediately \u2014 its `chat_id` is the conversation to continue with send_message. Follow the run with wait_for_run or get_run.",
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
},
{
"name": "list_chats",
"description": "List the account's chats, newest first.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "get_chat",
"description": "Get a chat's title, kind, and latest run.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "send_message",
"description": "Continue a chat with follow-up instructions or answers \u2014 the agent keeps its context. Resumes a run waiting in needs_input, or queues a new run when the last one finished. Returns run_busy while a run is still in progress. Optionally waits for the reply.",
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
},
{
"name": "list_messages",
"description": "Read a chat's messages, oldest first. Returns the most recent `limit` messages; page back through older ones with starting_after.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "wait_for_run",
"description": "Wait for a run to settle (completed, failed, or needs_input) and return it with the agent's final reply. Returns wait_timed_out if it is still running when the timeout passes; call again.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "get_run",
"description": "Fetch a run's current status, summary, pending approvals, and (once settled) the agent's final reply.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "list_runs",
"description": "List the account's task runs, newest first \u2014 delegated jobs and scheduled tasks alike. Filter by status or task.",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "resolve_approvals",
"description": "Approve or deny the integration actions a run is paused on (status needs_input with pending_approval_ids). Submit a decision for every pending id at once; the run resumes in the background.",
"annotations": {
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
},
{
"name": "cancel_run",
"description": "Stop a run that is pending, running, or waiting for input. The run is finalized as failed with 'Cancelled by the caller'.",
"annotations": {
"destructiveHint": true,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": false
}
},
{
"name": "api_search",
"description": "Discover available Crevio API endpoints. Use this BEFORE `api_execute` when you're unsure which endpoint to call, need to check parameter names, or want to explore what's available for a domain (e.g. \"experiences\", \"discounts\"). A `tools` method returns the full API catalog \u2014 an array of hashes keyed with strings: \"method\", \"path\", \"summary\", \"description\", \"tags\", \"parameters\", \"request_body\". Examples: `tools.select { |t| t[\"tags\"]&.include?(\"Products\") }.map { |t| \"#{t[\"method\"]} #{t[\"path\"]} \u2014 #{t[\"summary\"]}\" }` `tools.find { |t| t[\"path\"].include?(\"price_variants\") && t[\"method\"] == \"POST\" }[\"request_body\"]` `tools.map { |t| t[\"tags\"] }.flatten.compact.uniq.sort` \u2014 list all API domains",
"annotations": {
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": true,
"readOnlyHint": true
}
},
{
"name": "api_execute",
"description": "Execute Ruby in a sandboxed VM against the Crevio REST API. Use `api_search` first\nto find the endpoint and its body fields, then call it here. Chain calls, transform\nresults, return the final expression.\n\n## Available in your code\n\n```\nget(path, params = {}) # paths auto-prefixed with /v1, routed in-process\npost(path, **body) # body as keyword args or a hash \u2014 both work\npatch(path, **body)\ndelete(path)\nfind_endpoints(query) # -> [\"METHOD /path \u2014 summary\", ...]\niso8601(offset_seconds = 0) # mruby Time has no strftime/iso8601\n```\n\nReturns the **last expression**; `puts` is side-channel only. Every run answers\n`{result:, calls:, output:}` \u2014 `calls` audits each REST call (`method`, `path`,\n`status`, plus `error_code`/`param` on failure). When `result` has unexpected nils,\nread `calls` for a non-2xx. Never project only success fields (`{id: r[\"id\"]}`) \u2014\nthat hides the error from `result`.\n\n## Rules that the schema does not tell you\n\n- Params are unwrapped, Stripe-style: fields at the TOP level. `{product: {...}}` is\n silently dropped by most endpoints.\n- Associations take the bare resource name and a prefix_id string \u2014 `product: \"prod_x\"`,\n never `product_id:`. Some required ones never appear in a schema's `properties`.\n- Courses and content live under `/experiences`, NOT `/products`.\n- Lists answer `{object: \"list\", data: [...], has_more}`; single resources answer the\n object directly.\n- Connected integrations go through the same REST surface:\n `post(\"/connections/<id>/execute\", tool: \"<tool>\", arguments: {...})`, with ids from\n `get(\"/connections\", search: \"<service>\")`.\n- Sandboxed mruby: no `File`, `ENV`, `Net::HTTP`, `Process`. 10s, 10 MB.\n\n## Example \u2014 publishing a product (the ordering trap)\n\nA product cannot be created active: it needs a price variant first, or the call 422s.\n\n```ruby\nproduct = post(\"/products\", name: \"...\")\npost(\"/price_variants\", product: product[\"id\"], name: \"Standard\",\n amount_type: \"fixed\", amount: 4900, currency: \"usd\", billing_type: \"one_time\")\npatch(\"/products/#{product[\"id\"]}\", status: \"active\")\n```\n\nAPI groups: Access, Account, Ads, Analytics, ApiKeys, Approvals, Audio, BlogCategories, BlogPosts, Bookings, Bots, Broadcasts, Calls, Chapters, CheckoutLinks, Checkouts, Connections, Customers, Deployments, Discounts, Domains, Email, EventSessions, EventSources, EventTypes, Events, Experiences, Files, FormSubmissions, FormationDocuments, Formations, Forms, ForumPosts, Images, Invoices, Jobs, Leads, LegalPages, Lessons, LinkItems, Logs, Me, OrderItems, Orders, Phone Consents, Phone Numbers, Phone Suppressions, PriceVariants, Products, Refunds, Reviews, Schedules, Secrets, Sites, Skills, Socials, Status, Subscriptions, Tags, TaskRuns, Tasks, Topics, Usage, Users, Video, Web, WebhookEndpoints, WebhookEvents.\n",
"annotations": {
"destructiveHint": true,
"idempotentHint": false,
"openWorldHint": true,
"readOnlyHint": false
}
}
],
"auth": {
"type": "oauth2",
"protected_resource_metadata": "https://mcp.crevio.co/.well-known/oauth-protected-resource"
}
}