vending-machine-mcp
Allows the DevOps Dwarf agent to generate Docker files and manage container configurations as part of infrastructure asset production.
Allows the DevOps Dwarf agent to create Kubernetes manifests and deployment configurations for container orchestration.
Provides integration with OpenAI's LLM and embedding services, enabling AI agents to leverage OpenAI models for code review, analysis, and knowledge retrieval via vector stores.
Allows the DevOps Dwarf agent to generate Terraform infrastructure as code for cloud resource provisioning.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vending-machine-mcphire bug-hunter to find bugs in app.py"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vending Machine MCP Server
13 specialist AI agents for your coding assistant. Use them from Claude Code, Codex, or any MCP-compatible client.
Scope
This document describes the **vending-machine-mcp** PyPI package: a standalone stdio MCP server. It ships complete and does not depend on any other repository layout.
Source of truth for tools and agents in this package:
vending_machine_mcp/mcp_server.py
Related MCP server: Elisym Mcp Server
Tools (Current Signatures)
Tool | Signature | What it does |
|
| Lists available agent IDs, model, and description |
|
| Starts an async agent job and returns |
|
| Polls async job status/results |
|
| Finds scripts by natural-language query |
|
| Runs a marketplace script async, returns |
|
| Shows script details, validation info, usage, similar scripts |
|
| Runs Python/JS code in sandbox |
|
| Async workflow: Bug Hunter -> Test Goblin -> Code Gremlin |
|
| Embeds text (BYOK) and stores in local SQLite. Optional provider/model/dimensions override. |
|
| Semantic search (auto-detects provider/model from collection) |
|
| Lists collections, or documents inside one collection |
|
| RAG: retrieves chunks then LLM answers. Auto-detects embedding config. |
Async Behavior
hire_agent,run, andaudit_codereturn ajob_id.Use
check_job(job_id)to retrieve final output.
Agents (Current Registry)
Agent ID | Name | What it does |
| Bug Hunter | Code review, debugging, and security audits |
| Cloud Sensei | AWS architecture review, troubleshooting, cost optimization |
| Code Gremlin | Code writing, debugging, and refactoring |
| Data Sprite | DB schemas, migrations, seed data, ETL scripts |
| Desk Pilot | Admin support: email drafts, SOPs, meeting/task prep |
| DevOps Dwarf | Docker, Terraform, CI/CD, Kubernetes, deployment assets |
| Embeddings Agent | Embeds text, persists vectors to the local store, and analyzes similarity. After the job finishes, query with |
| Inbox Zero | Email triage, categorization, prioritization, draft replies |
| MCP Maker | MCP server scaffolding and tool definitions |
| Number Crunch | Data analysis, trends, KPI reporting |
| PDF Forge | Structured PDF/report generation |
| Test Goblin | Unit/integration/e2e test generation |
| Vibe Writer | Content drafting: posts, newsletters, messaging |
Quick Start
pip install vending-machine-mcpClaude Code / Codex / Any MCP Client
{
"mcpServers": {
"vending-machine": {
"command": "vending-machine-mcp"
}
}
}Usage
> hire_agent("bug-hunter", "Review this auth middleware for vulnerabilities: <paste code>")
> check_job("abc123")
> run("S-7K2M", "input payload")
> audit_code("<paste code>")
> vector_store_add("my-kb", "Full note text...", metadata_json='{"source":"notes.md"}')
> vector_store_search("my-kb", "How do we deploy?")
> query_knowledge("my-kb", "Summarize the deployment process")Embed and query flow (embeddings-agent + query_knowledge)
> hire_agent("embeddings-agent", "Embed my API docs: <paste text>")
> check_job("job-id")
-> "Stored 24 chunks in collection `embeddings-api-docs-txt`.
Query with: query_knowledge(collection='embeddings-api-docs-txt', question='...')"
> query_knowledge("embeddings-api-docs-txt", "How does authentication work?")
-> "Based on the documents: Authentication uses JWT tokens issued by... [1] [3]"What works out of the box
After pip install and pointing your MCP client at vending-machine-mcp, you do not need a separate database or vector service. Several tools are useful with no API keys at all:
**list_agents** — lists agents (starting a run still needs OpenRouter; see Requirements).**search_scripts** — natural-language search over bundled marketplace scripts using a local SQLite index and deterministic local embeddings when no embedding provider key is set. Results are real and ranked; quality is better if you set**VOYAGE_API_KEY** (or OpenAI / Gemini — same priority as below).**info** — script details from the in-memory store; similar scripts / chain hints use the same SQLite index when available.**vector_store_add/vector_store_search/vector_store_list** — personal collections in another local SQLite file; same local hash fallback without keys.**query_knowledge** — RAG over any collection: retrieves context chunks then asks an LLM to answer. Requires at least one LLM key (**OPENROUTER_API_KEY,**OPENAI_API_KEY, or**GEMINI_API_KEY**) for the answer step; embedding search itself works with local hash when no embedding key is set.
Anything that calls models (hire_agent, check_job results, audit_code) needs **OPENROUTER_API_KEY. Anything that runs code (run, run_code, sandbox paths inside agents) needs a sandbox key (DAYTONA_API_KEY or E2B_API_KEY). The **embeddings-agent expects at least one embedding provider key (see Requirements). No extra setup steps beyond env vars and MCP config.
Marketplace script search (search_scripts)
Implemented in
vending_machine_mcp/graph.py: a SQLite script index with semantic search over embedded script text. No external graph or vector database service is required.Default DB:
~/.local/share/vending-machine-mcp/script_index.sqlite3(or$XDG_DATA_HOME/vending-machine-mcp/…). Override with**SCRIPT_INDEX_DB_PATH**.Embeddings for indexing and queries use Voyage voyage-code-3 (document/query types) when
**VOYAGE_API_KEY** is set; otherwise OpenAI → Gemini → deterministic local hash, same idea as the vector store. Only rows whose stored vector length matches the query embedding are ranked (avoid mixing providers without re-seeding or clearing the DB).
Local vector store
Default DB path:
~/.local/share/vending-machine-mcp/vector_store.sqlite3(or$XDG_DATA_HOME/vending-machine-mcp/…). Override with**VECTOR_STORE_DB**.Uses the same embedding key priority as
vector_store_add: Voyage → OpenAI → Gemini → deterministic local hash. Override with**EMBEDDING_PROVIDER** /**EMBEDDING_MODEL** /**EMBEDDING_DIMENSIONS**env vars, or passprovider/model/dimensionsdirectly to each tool call.The provider and model used are stored per-document. When searching or querying, the tool auto-detects which provider/model the collection uses and embeds the query the same way.
OPENAI_API_KEY: what it does (and what it does not)
OPENAI_API_KEY is for OpenAI’s Embeddings API (text-embedding-3-small) wherever the package needs vectors. It is not a substitute for **OPENROUTER_API_KEY, which is what runs the LLM inside agents (including **embeddings-agent).
With **OPENAI_API_KEY** set (and no **VOYAGE_API_KEY**, which takes priority):
**search_scripts**— better semantic search over the marketplace script index (same key used when seeding/indexing scripts).**vector_store_add/vector_store_search**— embeddings for your personal collections (plus**vector_store_list**to inspect them).
There is no MCP tool that runs raw SQL. Your chat app talks to the two local SQLite files only through tools: use **search_scripts** for bundled scripts, and **vector_store_search** / **query_knowledge** / **vector_store_list** for data you added with **vector_store_add** or the **embeddings-agent**.
**embeddings-agent**: call **hire_agent("embeddings-agent", …)** then **check_job**. The agent now persists all chunks + vectors into the vector store under a named collection. Use **query_knowledge(collection, question)** afterward to ask questions about that data. The agent graph needs **OPENROUTER_API_KEY; the embedding steps need at least one embedding key (**OPENAI_API_KEY / Voyage / Gemini); **query_knowledge** needs at least one LLM key (OpenRouter, OpenAI, or Gemini) for the answer step.
Requirements
Python 3.11+
**OPENROUTER_API_KEY**— required to run agents (hire_agent,audit_code, and any tool that executes an LLM workflow). Not required only to list agents or to use search / vector store without agents.Sandbox — required for
**run,**run_code, and code execution inside agents: set**DAYTONA_API_KEY**or**E2B_API_KEY**. The server picks a provider when both exist; set**SANDBOX_PROVIDER=daytona**or**SANDBOX_PROVIDER=e2b**to force one.**embeddings-agent**— same as other agents:**OPENROUTER_API_KEY**is required to run it via**hire_agent. For embedding operations inside that agent, use at least one of**OPENAI_API_KEY,**VOYAGE_API_KEY**, or**GEMINI_API_KEY**(**GOOGLE_API_KEY**is an alias for Gemini).
Optional for better (not required for working) semantic search and vector store without using **embeddings-agent**: the same embedding keys. Priority is Voyage → OpenAI → Gemini → local hash (see sections above).
Environment variables can be set in the shell that launches the MCP server or in a **.env** file in the server’s working directory (the package loads it on startup).
Available Tools
12 toolsaudit_codeA
Full security audit pipeline: Bug Hunter finds vulnerabilities, Test Goblin generates regression tests, Code Gremlin writes fixes. Returns combined report.
Args: code: The source code to audit (paste the full code).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the pipeline stages and that it returns a combined report, providing some transparency. However, it is ambiguous whether 'writes fixes' means applying changes to the source code or just reporting suggested fixes, and it does not mention side effects, data handling, or execution mode (synchronous/asynchronous). With no annotations, this gap is significant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences covering the main functionality and a single-line Args section for the parameter. It is front-loaded with the core purpose and contains no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary steps and return value, but it lacks clarity on whether the audit runs synchronously or asynchronously, and whether fixes are applied directly or only reported. The output schema may explain the report structure, but the process details remain underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has no description for the 'code' parameter, the tool description explicitly explains it: 'code: The source code to audit (paste the full code).' This fully compensates for the 0% schema coverage for a single parameter, giving clear guidance on what to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('audit') and resource ('code') and details the pipeline stages (Bug Hunter, Test Goblin, Code Gremlin), making the purpose unambiguous. It distinguishes itself from siblings like run_code by emphasizing a security audit pipeline with reported outputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for security audits and lists the stages, giving clear context for when to use it. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_jobA
Check the status of a background agent job.
Args: job_id: The job ID returned by hire_agent for long-running agents.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It merely says 'check the status' but does not clarify whether the call blocks, what statuses are possible, whether it has side effects, or what happens if the job_id is invalid. This is a significant transparency gap for a polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, using two sentences to convey the purpose and the parameter origin. It is well-structured with a clear 'Args' section, front-loaded with the main verb. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, this is minimally viable but has gaps. It tells what it does and where the parameter comes from, but it does not describe the possible return statuses or how an agent should interpret the result. The presence of an output schema mitigates the need to explain return structure, but the absence of lifecycle context makes it harder to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for 'job_id' (0% coverage), so the description's explanation is essential. It adds meaning by specifying that the job_id comes from hire_agent, which directly helps an agent understand how to obtain it. This is adequate for a single parameter, though more detail on format or examples would elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Check the status of a background agent job.' It distinguishes itself from siblings by referencing hire_agent, which is the tool that returns the job_id. This is specific and actionable, though it could more explicitly contrast with list_agents or other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by noting the job_id is 'returned by hire_agent for long-running agents.' This gives clear context for its use. However, it does not state exclusions or explicitly recommend it over alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hire_agentA
Hire a Vending Machine agent to perform a task.
Args: agent_id: Which agent to hire. One of: bug-hunter, test-goblin, devops-dwarf, cloud-sensei, code-gremlin, data-sprite, desk-pilot, embeddings-agent, inbox-zero, mcp-maker, number-crunch, pdf-forge, vibe-writer. task: Detailed task description. Be specific — the agent only sees this text.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| agent_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Hire... to perform a task' and notes that the agent only sees the task text, but it does not explain side effects, asynchronous behavior, or what happens after hiring. This is a significant gap for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose followed by a brief parameter breakdown. Every sentence provides useful information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool, the description covers the inputs well and includes the full agent list. However, it leaves out behavioral context such as how to check on the hired task (sibling check_job exists) or whether hiring is asynchronous. Since an output schema exists, return values need not be described, but the operational lifecycle is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly lists all allowed agent_id values, which is not present in the schema (no enum). It also gives actionable guidance for the task parameter, emphasizing detail and the fact that the agent only sees this text. This fully compensates for the schema's 0% property description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Hire' and identifies the resource as 'Vending Machine agent', making the action clear. It distinguishes from siblings like list_agents and check_job, but it does not explicitly contrast with general tools like 'run', leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that the tool hires an agent to perform a task, providing clear context for when it is appropriate. However, it gives no guidance on when to prefer this over alternatives, nor does it mention companion tools like check_job for tracking the task. Thus, there is clear context but no exclusions or alternative routes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infoA
Get full details about a script: description, validation report, usage stats, similar scripts, and creator info.
Args: vending_code: The script's vending code (e.g. "S-7K2M").
| Name | Required | Description | Default |
|---|---|---|---|
| vending_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses the type of data returned (description, validation report, usage stats, etc.), which implies a read-only operation. However, it does not disclose additional behavioral traits such as required permissions, potential errors, or side effects. For a simple info tool, the disclosure is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded. The first sentence states the primary purpose, and the Args section is minimal yet informative. There is no redundant fluff or repetition of schema details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema available, no annotations), the description is mostly complete. It covers the tool's function and the parameter's meaning. However, it lacks explicit usage guidance or mention of alternative tools, which would make it fully complete. The output schema exists, so the description does not need to explain return values, but the lack of usage context slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It does so by explaining that vending_code is "the script's vending code" and provides an example format ("S-7K2M"). This adds meaningful context beyond the raw schema definition (just a string type) and helps the agent construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: "Get full details about a script" and lists the specific types of details (description, validation report, usage stats, similar scripts, creator info). This is a specific verb+resource combination. However, it does not explicitly distinguish itself from sibling tools like search_scripts or list_agents, though the scope is evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when full script details are needed) but provides no explicit guidance on when to prefer an alternative. It does not state exclusions or mention alternatives. The usage context is somewhat clear from the description itself but lacks explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_agentsA
List available Vending Machine agents and their capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. The verb 'List' implies a read-only operation, but the description does not explicitly state side effects, authentication needs, or rate limits. It is adequate for a simple list tool but lacks added behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that states the essential information without any waste. It is perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is nearly complete. It could be improved by explicitly noting that this is a safe, read-only operation or mentioning that output schema details capabilities, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is fully covered. The baseline for 0 params is 4; the description adds no parameter details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List') and its target ('available Vending Machine agents') along with what is returned ('their capabilities'). It is specific enough to distinguish from siblings like hire_agent or info, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool instead of alternatives. There is no mention of prerequisites, typical usage scenarios, or relationships to sibling tools like hire_agent or info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_knowledgeA
Ask a question about documents in a collection. Retrieves the most relevant chunks via semantic search, then uses an LLM to answer based on that context.
Works with any collection — those created by the embeddings-agent (hire_agent) or manually via vector_store_add.
Args: collection: Collection name (from embeddings-agent output or vector_store_add). question: Natural-language question about the stored data. limit: Number of context chunks to retrieve (1–20, default 5). provider: Embedding provider override for the query (openai, voyage, gemini, local). Empty = auto-detect from collection. model: Embedding model override. Empty = auto-detect from collection. dimensions: Output dimensions override (integer as string). Empty = auto-detect.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | No | ||
| provider | No | ||
| question | Yes | ||
| collection | Yes | ||
| dimensions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the semantic search and LLM pipeline, and details provider/model/dimension overrides with auto-detection behavior. It doesn't explicitly state that the operation is read-only or address failure cases, but it implies no side effects and provides substantial implementation detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a summary sentence, a compatibility note, and a parameter breakdown. It is appropriately sized given the six parameters, with no redundant text. The parameter list is necessary because the schema lacks descriptions, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description adequately covers purpose, parameter semantics, and behavioral details. It might benefit from explicit read-only clarification or alternative tool guidance, but it is essentially complete for a QA tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for any parameters, but the tool description thoroughly explains each one: collection sources, question semantics, limit range with default, and provider/model/dimension overrides with auto-detection. This fully compensates for the 0% schema coverage, adding meaning beyond the schema's bare titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: ask a question, retrieve relevant chunks via semantic search, and generate an answer using an LLM. This specific verb+resource combination distinguishes it from sibling tools like vector_store_search, which likely only retrieves chunks without generating an answer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context on when to use the tool by stating that it works with any collection, including those created by embeddings-agent or vector_store_add. However, it does not explicitly mention when not to use it or point to alternatives like vector_store_search, so there is clear context but no direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runA
Run a marketplace script by its vending code (e.g. S-7K2M). Returns a job_id for polling via check_job.
Args: vending_code: The script's vending code from search_scripts (e.g. "S-7K2M"). user_input: Text input for the script (check the script's input_schema for format).
| Name | Required | Description | Default |
|---|---|---|---|
| user_input | Yes | ||
| vending_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an asynchronous behavior via job_id and polling reference, but with no annotations, it doesn't elaborate on side effects, permissions, or execution environment. This leaves gaps for a tool that runs scripts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with its primary purpose, includes a useful example, and separates Args clearly. Every sentence serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the main flow: running a script, getting a job_id, and polling via check_job. It references search_scripts for discovery. However, it could mention error handling or what happens if the script fails, though the output schema reduces the need for return detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully compensates by explaining both parameters: vending_code's source and example, and user_input's purpose with a pointer to the script's input_schema. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a marketplace script by vending code, with a specific verb and resource. It also differentiates from siblings like run_code by specifying 'marketplace script' and referencing search_scripts for finding the vending code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: use after obtaining a vending code from search_scripts and poll the result via check_job. However, it does not explicitly exclude alternatives like run_code or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_codeA
Run code in a secure E2B sandbox. Returns stdout, stderr, and any errors.
Args: code: The source code to execute. language: "python" or "javascript" (default: python). packages: Comma-separated list of packages to install (e.g. "pandas,numpy").
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| language | No | python | |
| packages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the secure sandbox environment, the returned stdout/stderr/errors, and the ability to install packages via the packages parameter. It provides meaningful behavioral context, though it omits potential limits like network restrictions or timeouts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with an opening summary followed by an 'Args:' block. Every sentence adds value without waste, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality, all parameters, and return values, which is sufficient given the output schema. However, it lacks safety details like timeout behavior or resource limits, which would be useful for a code execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining each parameter. It specifies the 'code' source, the language with valid values and default, and the packages format with an example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Run') and resource ('code in a secure E2B sandbox'), clearly defining what the tool does. The mention of returning stdout, stderr, and errors adds distinctness, though it doesn't explicitly differentiate from sibling 'run'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the description of running code in a sandbox, but no explicit when-to-use or alternatives are mentioned. Sibling tools like 'run' and 'audit_code' are not referenced, so the agent gets no guidance on choosing this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_scriptsA
Search the marketplace for scripts matching a natural language query. Returns top 5 results with vending codes and descriptions.
Args: query: Natural language description of what you need (e.g. "analyze CSV data").
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does disclose the result limit ('top 5 results') and result contents ('vending codes and descriptions'), but does not mention whether the operation is read-only, authentication requirements, or any rate limits. This is minimally adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the primary purpose, followed by a useful return summary and a structured Args section. Every sentence earns its place without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with one parameter, the description is mostly complete: it states what to search, how to phrase the query, and what results will contain. An output schema exists, so detailed return types are covered elsewhere. It could add a note about error conditions or sorting, but overall it provides sufficient context for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides the parameter name and type, so the description adds essential meaning by explaining 'query' as a natural language description and providing a concrete example ('analyze CSV data'). This compensates for the 0% schema description coverage and gives the agent clear guidance for constructing the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') with a clear resource ('marketplace for scripts') and a defining scope ('matching a natural language query'). It also states the return value (top 5 results with vending codes and descriptions), making it easy to distinguish from sibling tools like list_agents or vector_store_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when you need to find scripts based on a natural language description, which is clear context. However, it does not explicitly mention alternatives or when not to use this tool, leaving the comparison with sibling tools implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vector_store_addA
Embed and store text in a named collection for later similarity search.
Embeddings use your configured keys in order: Voyage → OpenAI → Gemini → local hash, unless overridden via provider/model/dimensions params or EMBEDDING_* env vars.
Args: collection: Logical bucket name (e.g. "project-docs", "kb"). text: Full text to embed and store. doc_id: Optional stable id; a UUID is generated if omitted. metadata_json: Optional JSON object string (e.g. {"source":"readme.md"}). provider: Embedding provider override (openai, voyage, gemini, local). Empty = auto-detect. model: Embedding model override (e.g. "text-embedding-3-large"). Empty = provider default. dimensions: Output dimensions override (integer as string). Empty = provider default.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| model | No | ||
| doc_id | No | ||
| provider | No | ||
| collection | Yes | ||
| dimensions | No | ||
| metadata_json | No | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and excels. It discloses the provider selection order (Voyage → OpenAI → Gemini → local hash), override mechanisms, env var config, optional doc_id UUID generation, and the metadata_json format. This goes well beyond the bare schema and gives the agent critical operational knowledge.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. The opening sentence states the purpose, the provider order is a necessary complexity, and the Args list is compact and scannable. Every sentence contributes value without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, no annotations, and no schema descriptions, the description is remarkably complete. It covers the embedding pipeline, all parameters, provider override logic, and configuration via env vars. With an output schema present, the lack of return value detail is acceptable. The only minor omission is behavior for unknown collections, but this does not undermine overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description thoroughly explains every parameter in the Args section: collection's logical name, text's full text to embed, doc_id's optional stable id, metadata_json's form, and provider/model/dimensions as overrides. This adds substantial meaning beyond the schema's bare types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Embed and store text in a named collection for later similarity search.' The verb 'embed and store' plus resource 'named collection' is specific and distinguishes it from sibling tools like vector_store_search and vector_store_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context for when to use this tool (when adding text to a vector store for later retrieval) and implicitly contrasts with search/list siblings. However, it does not explicitly state alternatives or when-not-to-use, such as 'use vector_store_search to query.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vector_store_listA
List all collections, or list documents in one collection.
Args: collection: If empty, list collection names and counts. Otherwise list docs in that collection. limit: Max rows when listing documents in a collection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| collection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does disclose the conditional behavior—empty collection lists names/counts; non-empty lists documents—and the limit parameter's effect. However, it omits any mention of read-only guarantees, permissions, or return format, leaving some ambiguity about what 'list documents' returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. The two-sentence overview plus a short Args list contains no filler and each line contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained. The description covers both operational modes and the limit parameter, which is complete for a straightforward listing tool. Minor gaps exist around pagination or large result sets, but the core information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only types and defaults, so the description compensates fully. The Args section explains that 'collection' switches between two listing modes and 'limit' caps rows, adding crucial semantics beyond the schema's minimal metadata.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists collections or documents, using the active verb 'List' and specific resources 'collections' and 'documents'. It distinguishes itself from sibling tools like vector_store_add and vector_store_search by focusing solely on listing behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two listing modes based on the 'collection' parameter, providing clear context for when to use each mode. However, it does not explicitly compare this tool to alternatives like vector_store_search or provide exclusion criteria, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vector_store_searchA
Semantic search over a collection using the same embedding route as vector_store_add.
By default, the query embedding is auto-matched to the collection's stored provider/model. Use provider/model/dimensions to override.
Args: collection: Collection name used with vector_store_add. query: Natural-language query. limit: Max results (1–50). provider: Embedding provider override for the query (openai, voyage, gemini, local). Empty = auto-detect from collection. model: Embedding model override (e.g. "voyage-code-3"). Empty = auto-detect from collection. dimensions: Output dimensions override (integer as string). Empty = auto-detect.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| model | No | ||
| query | Yes | ||
| provider | No | ||
| collection | Yes | ||
| dimensions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains the auto-matching of provider/model and the ability to override, which are valuable non-obvious behaviors. It stops short of covering auth, rate limits, or error cases, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose, includes a brief default-behavior note, and then provides a compact Arg list. Every sentence contributes value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description sufficiently covers the tool's behavior and all parameters. It provides enough context for an agent to select and invoke the tool correctly, even without explicit failure-mode details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The Args section adds detailed meaning to all six parameters, including the relationship to vector_store_add, the natural-language nature of the query, the 1–50 limit bound, valid provider values, an example model, and the string form of dimensions. This fully compensates for the schema's lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Semantic search') and identifies the resource ('collection'), and it ties the behavior to vector_store_add's embedding route. This makes the tool's purpose clear and distinguishes it from generic search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for collections created with vector_store_add, which gives some context for when to use it. However, it does not explicitly mention alternatives like query_knowledge or provide exclusions, so usage guidance is largely implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource+action: scripts (search, run, info), agents (list, hire, check_job), vector store (add, search, list, query_knowledge), and code (run_code, audit_code). The only potential overlap is run vs run_code, but their descriptions clearly separate marketplace script execution from sandboxed code execution.
Naming conventions are mixed: verb-noun (list_agents, search_scripts, hire_agent, check_job, run_code, audit_code), noun-verb (vector_store_add, vector_store_search, vector_store_list), and cryptic single-word names like 'run' and 'info'. 'run' is especially ambiguous given run_code exists.
12 tools is well-scoped for a server handling marketplace scripts, hiring agents, vector storage, and code execution. Each tool has a clear place and no redundant clutter.
Core workflows are covered, but notable gaps exist: no delete/update for vector store documents, no list_scripts for browsing the full marketplace, and no job management beyond check_job (e.g., cancel or list jobs). These gaps may require workarounds.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI agent marketplace for automated employees, workflows, skills, and tool orchestration.
The marketplace where agents don't just use tools — they build, publish, and compose new ones.
Discover, verify, and hire AI agents from the NovaRail marketplace, from your editor.
Discover and hire AI agents with micropayments. Search, check reputation, get pricing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn agent-to-agent marketplace where AI agents discover, hire, and pay each other in USDC on Base. Agents list services, post jobs, submit proposals, and invoke each other's capabilities — all through API, MCP, or A2A protocol.MIT
- AlicenseNot gradedqualityFmaintenanceAI agents that hire other AI agents — and pay in SOL. Decentralized agent marketplace via Nostr + Solana.MIT
- AlicenseAqualityDmaintenanceProvides access to a library of 18 specialized skills, project templates, and prompt patterns for Claude Code. It enables automated workflows for feature development, security audits, and system maintenance through multi-agent collaboration.613MIT
- AlicenseBqualityAmaintenanceMarketplace where AI coding agents fix GitHub bugs for cash bounties. Posters draft and fund bounties from chat (Stripe Checkout); solvers browse open work, request repo access, submit PRs, and get paid in USDC, ETH, or BTC. 11 tools.274831MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/YokiiDesu/vending-machine-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server