Capability
plungeai-discovery
Find the right thing on PlungeAI's live registry before building anything: agents, structured tools, models, skills, personas, connectors, and workflow templates, via hybrid semantic + keyword search (plungeai_list_agents MCP / GET /v1/discovery/search REST / ocean-cli discovery search), full capability cards, a recommendation (POST /v1/discovery/recommend) and a one-answer resolver (POST /v1/discovery/resolve), tool-invocation contracts (plungeai_get_tool_contract / GET /v1/tools/{id}), and the template gallery (plungeai_templates / GET /v1/templates). Use when picking an agent/tool/model/skill for a job, before the first call to an unfamiliar agent, deciding what to build from, or debugging a refused/unknown id. Ids are live and active-only — never assert one from memory. For running a prompt-driven agent use plungeai-agents; for typed tool execution plungeai-tools-connectors; for the model catalog plungeai-models; for CNL authoring plungeai-workflows.
Download zip (opens in a new tab) · View raw SKILL.md (opens in a new tab)
The platform's capability catalog — agents, tools, models, skills, personas, connectors, workflows — is live and changes without notice. Discovery is not an optional first step, it is the mechanism that makes every other capability usable: an id you did not just get from a live lookup is likely to be refused at execution.
Prerequisites
- Self-service
ozk_key from Dashboard → One API → Keys (https://dashboard.plungeai.com). - MCP:
https://mcp.plungeai.com/v1. REST:https://api.plungeai.com.
Discovery first (this IS the discovery-first step)
Never name an agent, tool, connector, or model in generated code, a workflow, or a reply unless that exact id came from one of the calls below in this session. "90-something agents" is flavor; the live catalog is the fact.
1. Search by capability — MCP
plungeai_list_agents {search: "convert pdf to markdown"}
plungeai_list_agents {kind: "skills", search: "…"}
plungeai_list_agents {agent_id: "exa-agent"} // full cardkind filters the catalog segment: agents (default, active-only) |
personas | experts | skills | models | workflows |
connectors. Full parameter table and failure modes —
references/list-and-contract.md.
2. Search by capability — REST
curl -s "https://api.plungeai.com/v1/discovery/search?q=web%20search&kind=agents&limit=2" \
-H "Authorization: Bearer ozk_YOUR_KEY"Or let the platform pick for you:
curl -s -X POST https://api.plungeai.com/v1/discovery/recommend \
-H "Authorization: Bearer ozk_YOUR_KEY" -H "Content-Type: application/json" \
-d '{"type": "agent", "task": "summarize a long PDF into bullet points"}'Full query params (mode, fields, include=quality, …), response shapes,
and the full-card markdown route (GET /v1/discovery/cards/{type}/{id}) —
references/search-and-recommend.md.
3. Inspect before you call — the tool contract
Before the first call to an unfamiliar structured tool-agent (a card with a Parameters table), fetch its invocation contract — it IS the API docs, and (over MCP) carries the acting user's live credential status:
plungeai_get_tool_contract {agent_id: "markitdown"}curl -s https://api.plungeai.com/v1/tools/markitdown -H "Authorization: Bearer ozk_YOUR_KEY"4. Starting points instead of from scratch — templates
plungeai_templates {action: "list", category: "research"}
plungeai_templates {action: "get", template_id: "<id>"}Browses Studio's own template gallery (ready-made workflows/agents/bots).
Full detail — references/list-and-contract.md.
Over the One API — every discovery route
Same ozk_ key (plungeai-api-setup). Nothing here runs or spends anything; the two POST routes recommend and
resolve are rate-limited (429 rate_limited, Retry-After), the catalog GETs are not.
| Job | REST | MCP | CLI ocean-cli … |
|---|---|---|---|
| search | GET /v1/discovery/search?q=&kind=&category=&limit=&offset=&mode=&fields= → {cards, count, total, searchMethod} | plungeai_list_agents {search, kind, category} | discovery search Q --kind |
| one card | GET /v1/discovery/cards/{type}/{id} → markdown | plungeai_list_agents {agent_id} | discovery card TYPE ID |
| best card | POST /v1/discovery/recommend {type, task} → {recommended, card, score} | — | discovery recommend TASK |
| one answer | POST /v1/discovery/resolve {task, kinds?, category?} → {outcome, tool, operation, call: {required_params, example_cnl}, confidence, alternatives} | — | discovery search / recommend |
| contract | GET /v1/tools/{id} | plungeai_get_tool_contract | tools get ID |
| templates | GET /v1/templates?kind=&category=&limit= → {templates, count}; GET /v1/templates/{id} → {template, yaml}; POST /v1/templates/{id}/use {name?} → 201 {workflow} | plungeai_templates list / get / use | templates list / get / use |
What builders get wrong:
- Page with
total, notcount.countis this page's length; search also returnstotal(every card the filters match).GET /v1/agentsandGET /v1/toolshave onlycount: page until a short page. - REST knows more kinds than MCP. REST
kind:agents,skills,digital-twins,personas,experts,backgrounds,workflows,models,providers,connectors,plugins,mcp-servers; the MCP tool'skindstops atagents,personas,experts,skills,models,workflows,connectors. A card URL takes the singular type (agent,digital_twin,mcp_server, …); the plural kinds are accepted as aliases. recommendedcan benull(score0). Onresolve, act only onoutcome: "match"with a realconfidence(nullis the keyword fallback);uncertainandnonemean read the cards yourself.- Agent cards carry
credential({tier: "platform"}or{tier: "connection", provider, method}): read it before you call, so a connection-tier agent does not surprise you with a424(plungeai-tools-connectors). - A template
useis a copy that is yours. It creates a saved workflow of the template's kind and runs the same save-time lint (422 invalid_workflow, nothing created);404 template_not_foundfor an inactive id. - Model cards read
provider:model; the model routes take theprovider/modelslug fromGET /v1/models(plungeai-models). - MCP
format: "json"is not typed rows. Onplungeai_list_agentsit wraps the rendered markdown as{content: "<markdown>"}; for machine-readable cards useGET /v1/discovery/search(orocean-cli discovery search --json).
Gotchas
- Substring near-misses are not the same id.
brave-agentmay exist whilebrave-searchdoes not — take ids character-for-character from a result, never guess a variant. countis a page length, not a catalog total. Page until a short page comes back (search also answerstotal); don't stop atoffset >= count.- Errors on
/v1/discovery/recommendand/v1/discovery/cards/{type}/{id}are always the One API envelope. The router normalizes the registry's own flat{"error": "<string>"}rejections into{"error":{"code","message"}}before they reach you (codeisnot_foundon a 404,invalid_requestotherwise; the original text lands inmessage) —err.error.codeis always safe to read on these two routes. - "My agents" is not the registry. Users mean their saved workflows
(
plungeai_list_workflows) — the registry (plungeai_list_agents) is the platform's own capability catalog, for when YOU are composing. - Discovery finds the contract; it doesn't execute anything. Fetching a card or a contract never runs a workflow or spends a token — it's always safe to over-discover.
Related skills
plungeai-agents— execute a prompt-driven agent once you've found it.plungeai-tools-connectors— typed execution against a fetched contract, connected-account status.plungeai-models— the model catalog (GET /v1/models) and money plane.plungeai-workflows— instantiate a template into a saved workflow (plungeai_templates {action: "use"}), CNL authoring.plungeai-results-traces— execution trace lookups (GET /v1/traces/{id}), a separate observability surface.plungeai-platform— how discovery fits into the platform's five layers.
Reference pages
The registry is LIVE: agents come from the registry service at request time, no static manifest.
Discovery is the live catalog of everything the platform can do — agents, workflows, MCP servers, connectors, models — with hybrid semantic + keyword search…