Skip to main content
Glama

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.

License Python 3.11+ TDS MCP Docs

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 search() im System-Prompt“

Keine typisierten Argumente. Keine Enums. Kein verstecktes tenant = acme.

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 --> H

Eine Datei, zwei Türen. Gleiche kompilierte Werkzeuge.

Python-App

Chat-/IDE-Host

Installieren

pip install "vectorsmith[qdrant,langchain]"

pip install "vectorsmith[qdrant]" damit vectorsmith auf dem PATH ist

Aufrufen

from vectorsmith import load_tools

vectorsmith serve tools.yaml --name invoices

Prozess

In-Process. Kein Subprozess.

Der Host startet die CLI (MCP stdio oder HTTP)

Einbinden

Deine @tools + Slack/GitHub über einen MCP-Client

Andere mcpServers-Schlüssel liegen daneben

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: 50

vectorsmith 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

kind

Wofür

Typisches Werkzeug

search

Semantisches Abrufen + Filter

search_invoices

lookup

Exakte ID, Limit 1

get_invoice

count

„Wie viele überfällig?“

count_invoices

scroll

Filtern / Seiten, kein ANN

Listenartige Werkzeuge

pipeline

Abrufen → post_filter / group_by / sort / project

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

vectorsmith[langchain]

from vectorsmith import load_tools

vectorsmith[langgraph]

gleiche Werkzeuge; LangGraph-Graph

vectorsmith[openai-agents]

from vectorsmith.openai_agents import load_tools

vectorsmith[anthropic]

from vectorsmith.anthropic import load_tools

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_desktop_config.json

docs/integrations/claude-desktop.md

Claude Code

.mcp.json / claude mcp add

docs/integrations/claude-code.md

OpenAI Codex

~/.codex/config.toml

docs/integrations/openai-codex.md

Cursor

.cursor/mcp.json

docs/integrations/cursor.md

claude.ai

serve --http --auth builtin

docs/quickstart-selfhost.md

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.example

Tickets sind eine zweite Datei / ein zweiter MCP-Name: tools.tickets.yaml--name tickets.

Beispiel-Durchlauf


CLI

Befehl

Funktion

init

Schreibt eine Start-tools.yaml + .env.example

validate

Kompilieren + Linten. --live pingt den Speicher an. --strict schlägt bei Warnungen fehl

test

Ein kompiliertes Werkzeug aufrufen, ohne zu serven

serve

MCP stdio (Desktop / Codex / Cursor; --watch standardmäßig aktiv) oder --http HOST:PORT (kein Watch). Standard-HTTP---auth ist builtin (benötigt https --public-url). Localhost-HTTP: --auth none.

introspect

Sammlungs-/Feld-Metadaten nach --out (Standard schema.json). Erfordert --connection.

drafts / approve

drafts list|reject NAME. approve NAME [--file tools.yaml] übernimmt in diese Datei. Entwürfe liegen in ./tools.drafts.yaml (Prozess-CWD).

auth

rotate-secret | revoke für eingebautes HTTP-OAuth

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

Erste Schritte

Sehen, welche Vector-Stores mitgeliefert werden

Vector-Speicher

Jedes tools.yaml-Feld verstehen

YAML-Referenz

In Claude, Codex, Cursor, LangChain, … einbinden

Integrationen

Einen CLI-Flag nachschlagen

CLI

Werkzeuge aus Python aufrufen

Python-API

Desktop-Verbindungsproblem / Env / HTTP-Auth beheben

FAQ

Eine Host-Konfiguration kopieren

examples/mcp_hosts

Agenten-Apps sehen

examples/


Entwickeln

uv sync
uv run ruff check .
uv run pytest -m "not conformance"
uv run lint-imports

Arbeitsbereich: packages/core (vectorsmith_core, unveröffentlicht) · packages/cli (veröffentlicht vectorsmith). Core darf die CLI nicht importieren.

Mitwirken · Support · Sicherheit · Changelog · Verhaltenskodex


Apache-2.0 · LICENSE · NOTICE

Schmiede die Werkzeuge. Behalte den Store.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI-powered generation of production-ready CTP (ConveniencePro Tool Protocol) tools from natural language descriptions, including tool definitions, implementations, tests, and TypeScript validation.
    5
    12
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    Converts any OpenAPI/Swagger API specification into MCP tools that AI assistants can use to interact with the API.
    24
    7
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Transforms OpenAPI definitions into MCP tools for seamless LLM-API integration.
    8
    39
    1
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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