VectorSmith
VectorSmith
Deine Vektordatenbank, geschmiedet zu Werkzeugen, die ein Agent tatsächlich nutzen kann.
Schreibe eine tools.yaml. VectorSmith kompiliert sie in typisierte, mandantengeschützte Werkzeuge – dann kannst du sie entweder in Python importieren oder über MCP serven.
Was es ist · So funktioniert es · YAML schreiben · Python · Claude / Codex / Cursor · Ausprobieren · Dokumentation
Warum es das gibt
Agenten, die mit deinen Rechnungen, Tickets oder Katalogen sprechen, bekommen normalerweise eine von zwei schlechten Optionen:
Typischer Ansatz | Was schiefgeht |
Anbieter-MCP (Qdrant / Pinecone / …) | Cluster-Admin-Tools. Upsert, Delete, Create-Collection. Das Modell kann umherirren. |
JSON-Schemas von Hand an LangChain / das OpenAI SDK binden | Du implementierst Filter, Limits und Mandantenisolation in Python neu. Jeder Agent kopiert es. |
„Einfach einbetten und | Keine typisierten Argumente. Keine Enums. Kein verstecktes |
VectorSmith ist die dritte Option: Der Datenspeicher bleibt deiner. Die Werkzeuge sind ein YAML-Vertrag. Der Compiler verwandelt diesen Vertrag in MCP-Schemas oder In-Process-Werkzeuge. Der Agent sieht nie die URL, den API-Schlüssel oder den Mandanten-Filter.
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
So funktioniert's
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 --> HEine Datei, zwei Türen. Gleiche kompilierte Werkzeuge.
Python-App | Chat-/IDE-Host | |
Installieren |
|
|
Aufrufen |
|
|
Prozess | In-Process. Kein Subprozess. | Der Host startet die CLI (MCP stdio oder HTTP) |
Einbinden | Deine | Andere |
Du importierst keinen Executor. Du kopierst inputSchema nicht in das LLM-SDK.
Ein Werkzeug schreiben, nicht einen Prompt
Ein Werkzeug ist ein Name, eine Beschreibung (damit das Modell es auswählt), eine Sammlung, optionale Textsuche, Parameter die das Modell übergeben darf, und Filter, die es niemals sehen darf:
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 schreibt eine Startdatei. Die vollständige Feldliste – Arten, Operatoren, Pipelines, Built-ins, jedes Backend – steht in docs/tools-yaml-reference.md.
Was das Modell sieht
{
"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 ist nicht in diesem Schema. Die Engine verknüpft es bei jedem Aufruf per UND. Anmeldedaten verlassen connections nie.
Arten, die du deklarieren kannst
| Wofür | Typisches Werkzeug |
| Semantisches Abrufen + Filter |
|
| Exakte ID, Limit 1 |
|
| „Wie viele überfällig?“ |
|
| Filtern / Seiten, kein ANN | Listenartige Werkzeuge |
| Abrufen → | Top-N pro Kunde |
Built-ins (search_<connection>, get_<connection>_by_id, …) sind opt-in auf der Verbindung. Schalte sie ab, wenn du bereits ein Benutzerwerkzeug mit demselben Namen benannt hast.
In deinem Agenten (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()Gleiches YAML, andere 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", {…})Zusätzlich | Import |
|
|
| gleiche Werkzeuge; LangGraph-Graph |
|
|
|
|
Funktionierende Apps: examples/langchain_agent · langgraph_agent · openai_agents · anthropic_agent.
In Claude, Codex, Cursor
Diese Produkte können vectorsmith nicht importieren. Sie starten einen Prozess. Richte sie auf serve mit der gleichen YAML aus.
{
"mcpServers": {
"invoices": {
"command": "vectorsmith",
"args": ["serve", "tools.invoices.yaml", "--name", "invoices"]
}
}
}Codex ist TOML (~/.codex/config.toml), nicht JSON. Claude Code verwendet .mcp.json – es liest nicht die Desktop-Datei.
Host | Konfiguration | Anleitung |
Claude Desktop |
| |
Claude Code |
| |
OpenAI Codex |
| |
Cursor |
| |
claude.ai |
|
Copy-Paste-Snippets: examples/mcp_hosts/. Slack, GitHub, Dateisystem bleiben getrennte Server – Koexistenz.
Speicher
backend auf einer Verbindung ist einer von sechs mitgelieferten Adaptern. Vollständige Matrix (Extras, Hybrid, verschachtelte Pfade): Vektor-Speicher.
qdrant · pgvector · chroma · pinecone · weaviate · milvus
pgvector kann im Tabellenmodus (ohne Vektor-Spalte) für Lookup / Count / Scroll laufen. Hybride Suche ist fähigkeitsbasiert (Qdrant / Weaviate / Milvus / Pinecone) und wird mit validate --live geprüft.
Ausprobieren
Das Rechnungs-Beispiel ist eine tools.yaml plus eine Env-Datei. Kopiere .env.example und setze QDRANT_URL auf deinen Cluster, bevor du validate / test / serve ausführst.
# 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.exampleTickets sind eine zweite Datei / ein zweiter MCP-Name: tools.tickets.yaml → --name tickets.
CLI
Befehl | Funktion |
| Schreibt eine Start- |
| Kompilieren + Linten. |
| Ein kompiliertes Werkzeug aufrufen, ohne zu serven |
| MCP stdio (Desktop / Codex / Cursor; |
| Sammlungs-/Feld-Metadaten nach |
|
|
|
|
validate beendet mit 0 / 1 (--strict-Warnungen) / 2 (Fehler). test und introspect verwenden 3 bei einem Live-Fehler. serve --http --auth none außerhalb von localhost beendet mit 3.
Dokumentation
kjgpta.github.io/vectorsmith ist das gerenderte Handbuch (Material for MkDocs). Quelle ist docs/.
Ich möchte… | Gehe hierhin |
Ein Werkzeug in fünf Minuten zum Laufen bringen | |
Sehen, welche Vector-Stores mitgeliefert werden | |
Jedes | |
In Claude, Codex, Cursor, LangChain, … einbinden | |
Einen CLI-Flag nachschlagen | |
Werkzeuge aus Python aufrufen | |
Desktop-Verbindungsproblem / Env / HTTP-Auth beheben | |
Eine Host-Konfiguration kopieren | |
Agenten-Apps sehen |
Entwickeln
uv sync
uv run ruff check .
uv run pytest -m "not conformance"
uv run lint-importsArbeitsbereich: packages/core (vectorsmith_core, unveröffentlicht) · packages/cli (veröffentlicht vectorsmith). Core darf die CLI nicht importieren.
Mitwirken · Support · Sicherheit · Changelog · Verhaltenskodex
Schmiede die Werkzeuge. Behalte den Store.
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