VectorSmith
VectorSmith
Tu base de datos vectorial, forjada en herramientas que un agente realmente puede usar.
Escribe un tools.yaml. VectorSmith lo compila en herramientas tipadas y protegidas por tenant — y luego puedes importarlas en Python o serverlas por MCP.
Qué es · Cómo funciona · Escribir YAML · Python · Claude / Codex / Cursor · Pruébalo · Docs
Por qué existe
Los agentes que hablan con tus facturas, tickets o catálogo normalmente se topan con una de dos malas opciones:
Enfoque típico | Lo que sale mal |
MCP de proveedor (Qdrant / Pinecone / …) | Herramientas de administración de clúster. Upsert, delete, create-collection. El modelo puede desviarse. |
Vincular manualmente esquemas JSON a LangChain / el SDK de OpenAI | Reimplementas filtros, límites y aislamiento por tenant en Python. Cada agente lo copia. |
«Simplemente haz embed y | Sin argumentos tipados. Sin enums. Sin un |
VectorSmith es la tercera opción: el almacén de datos sigue siendo tuyo. Las herramientas son un contrato YAML. El compilador convierte ese contrato en esquemas MCP o herramientas en proceso. El agente nunca ve la URL, la clave API ni el filtro de tenant.
you write VectorSmith the agent sees
───────────── ───────────────── ────────────────
tools.yaml ──▶ interpolate → validate → compile ──▶ search_invoices
tenant: acme Engine stays internal query, client, status
${QDRANT_URL} (no tenant, no URL)Related MCP server: openapi-mcp-server
Cómo funciona
flowchart LR
subgraph author["You"]
Y["tools.yaml"]
E[".env / ${VAR}"]
end
subgraph vs["VectorSmith"]
L["load + secret lint"]
V["validate VBxxxx"]
C["compile schemas + plan"]
end
subgraph out["Consume once"]
P["load_tools() / connect()"]
M["vectorsmith serve"]
end
subgraph hosts["Hosts"]
A["LangChain · LangGraph · Agents SDK · Anthropic"]
H["Claude · Codex · Cursor · claude.ai"]
end
Y --> L
E --> L
L --> V --> C
C --> P --> A
C --> M --> HUn archivo, dos puertas. Las mismas herramientas compiladas.
Aplicación Python | Host de chat / IDE | |
Instalación |
|
|
Llamada |
|
|
Proceso | En proceso. Sin subprocesos. | El host lanza el CLI (MCP stdio o HTTP) |
Mix-in | Tus | Otras claves de |
No importas un ejecutor. No copias inputSchema en el SDK del LLM.
Escribe una herramienta, no un prompt
Una herramienta es un nombre, una descripción (para que el modelo la elija), una colección, búsqueda de texto opcional, parámetros que el modelo puede pasar y filtros que nunca debe ver:
tds_version: "1"
connections:
invoices:
backend: qdrant
url: ${QDRANT_URL} # secrets only here, only as ${VAR}
api_key: ${QDRANT_API_KEY:-}
tools:
- name: search_invoices
kind: search
description: >
Search invoices by free text and filter by client, status, or amount.
Use when the user asks about invoices, billing, or payments.
target: { connection: invoices, collection: invoices }
query: { param: query, required: false }
static_filters:
- { path: tenant, op: eq, value: acme } # hidden from the model
parameters:
- { name: client, path: client_name, dtype: keyword, op: eq }
- { name: status, path: status, dtype: keyword, op: in,
enum: [draft, sent, paid, overdue] }
- { name: min_amount, path: amount, dtype: float, op: gte }
output:
fields: [invoice_id, client_name, status, amount]
limit_default: 10
limit_max: 50vectorsmith init ./demo crea un archivo inicial. La lista completa de campos — kinds, operadores, pipelines, built-ins, todos los backends — está en docs/tools-yaml-reference.md.
Lo que ve el modelo
{
"name": "search_invoices",
"description": "Search invoices by free text and filter by client, status, or amount. …",
"inputSchema": {
"type": "object",
"properties": {
"query": { "type": "string" },
"client": { "type": "string" },
"status": {
"type": "array",
"items": { "type": "string", "enum": ["draft", "sent", "paid", "overdue"] }
},
"min_amount": { "type": "number" },
"limit": { "type": "integer", "minimum": 1, "maximum": 50, "default": 10 }
}
}
}tenant: acme no está en ese esquema. El motor lo combina con AND en cada llamada. Las credenciales nunca salen de connections.
Kinds que puedes declarar
| Para | Herramienta típica |
| Recuperación semántica + filtros |
|
| ID exacto, límite 1 |
|
| «¿Cuántos están vencidos?» |
|
| Filtrar / paginar, sin ANN | herramientas de tipo lista |
| Recuperar → | top-N por cliente |
Los built-ins (search_<connection>, get_<connection>_by_id, …) son opt-in en la conexión. Desactívalos si ya nombraste una herramienta de usuario con el mismo nombre.
En tu agente (Python)
pip install "vectorsmith[qdrant,langchain]"from vectorsmith import load_tools
from langchain.agents import create_agent
tools = load_tools("tools.invoices.yaml", "tools.tickets.yaml")
agent = create_agent("openai:gpt-4.1", tools)
# … await tools.aclose()El mismo YAML, otros stacks:
from vectorsmith.langgraph import load_tools # create_react_agent / ToolNode
from vectorsmith.openai_agents import load_tools # Agent + Runner
from vectorsmith.anthropic import load_tools # messages.create(tools=vs.tools)
from vectorsmith import connect # await vs.call("search_invoices", {…})Extra | Importación |
|
|
| mismas herramientas; grafo de LangGraph |
|
|
|
|
Aplicaciones funcionales: examples/langchain_agent · langgraph_agent · openai_agents · anthropic_agent.
En Claude, Codex, Cursor
Esos productos no pueden import vectorsmith. Lanzan un proceso. Apúntalos a serve con el mismo YAML.
{
"mcpServers": {
"invoices": {
"command": "vectorsmith",
"args": ["serve", "tools.invoices.yaml", "--name", "invoices"]
}
}
}Codex usa TOML (~/.codex/config.toml), no JSON. Claude Code usa .mcp.json — no lee el archivo de Desktop.
Host | Config | Guía |
Claude Desktop |
| |
Claude Code |
| |
OpenAI Codex |
| |
Cursor |
| |
claude.ai |
|
Fragmentos listos para copiar y pegar: examples/mcp_hosts/. Slack, GitHub y el sistema de archivos siguen siendo servidores separados — coexistencia.
Almacenes
backend en una conexión es uno de los seis adaptadores incluidos. Matriz completa (extras, híbrido, rutas anidadas): almacenes vectoriales.
qdrant · pgvector · chroma · pinecone · weaviate · milvus
pgvector puede ejecutarse en modo tabla (sin columna vectorial) para lookup / count / scroll. La búsqueda híbrida está limitada por capacidades (Qdrant / Weaviate / Milvus / Pinecone) y se comprueba con validate --live.
Pruébalo
El ejemplo de facturas es un tools.yaml más un archivo de entorno. Copia .env.example y establece QDRANT_URL en tu clúster antes de validate / test / serve.
# clone, then:
uv sync
uv run vectorsmith validate examples/qdrant_invoices/tools.invoices.yaml \
--env-file examples/qdrant_invoices/.env.example
uv run vectorsmith test examples/qdrant_invoices/tools.invoices.yaml search_invoices \
--args '{"query":"Globex invoice","limit":3}' \
--env-file examples/qdrant_invoices/.env.example
uv run vectorsmith serve examples/qdrant_invoices/tools.invoices.yaml --name invoices \
--env-file examples/qdrant_invoices/.env.exampleLos tickets son un segundo archivo / segundo nombre MCP: tools.tickets.yaml → --name tickets.
CLI
Comando | Descripción |
| Escribe un |
| Compila + lint. |
| Llama a una herramienta compilada sin servirla |
| MCP stdio (Desktop / Codex / Cursor; |
| Metadatos de colección / campo en |
|
|
|
|
validate sale con 0 / 1 (advertencias de --strict) / 2 (errores). test e introspect usan 3 ante un fallo en vivo. serve --http --auth none fuera de localhost sale con 3.
Documentación
kjgpta.github.io/vectorsmith es el manual renderizado (Material for MkDocs). La fuente está en docs/.
Quiero… | Ve aquí |
Poner una herramienta en marcha en cinco minutos | |
Ver qué almacenes vectoriales se incluyen | |
Entender cada campo de | |
Integrarlo con Claude, Codex, Cursor, LangChain, … | |
Consultar una opción de CLI | |
Llamar a herramientas desde Python | |
Solucionar desconexión de Desktop / env / autenticación HTTP | |
Copiar una configuración de host | |
Ver aplicaciones de agente |
Desarrollo
uv sync
uv run ruff check .
uv run pytest -m "not conformance"
uv run lint-importsEspacio de trabajo: packages/core (vectorsmith_core, sin publicar) · packages/cli (publicado como vectorsmith). Core no debe importar el CLI.
Contribuir · Soporte · Seguridad · Cambios · Código de conducta
Forja las herramientas. Conserva el almacén.
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 Servers
- AlicenseAqualityDmaintenanceEnables AI-powered generation of production-ready CTP (ConveniencePro Tool Protocol) tools from natural language descriptions, including tool definitions, implementations, tests, and TypeScript validation.512MIT
- Alicense-qualityCmaintenanceConverts any OpenAPI/Swagger API specification into MCP tools that AI assistants can use to interact with the API.247MIT
- AlicenseBqualityCmaintenanceTransforms OpenAPI definitions into MCP tools for seamless LLM-API integration.8391MIT
- Flicense-qualityDmaintenanceAggregates tools from multiple MCP servers, generates TypeScript definitions, and executes custom TypeScript scripts to orchestrate cross-server tool calls.
Related MCP Connectors
Point Gecko at an OpenAPI spec; get first-call-correct, auth-hidden agent tools.
Reliable async execution for agent tool calls: schema gating, retries, idempotency, audit trail.
33 tools that make AI write, implement, and verify intent against explicit, testable constraints.
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/kjgpta/vectorsmith'
If you have feedback or need assistance with the MCP directory API, please join our Discord server