Metadata-Version: 2.5
Name: vectorsmith
Version: 0.1.1
Summary: YAML tools for agents: load_tools in-process, or vectorsmith serve as MCP
Project-URL: Homepage, https://github.com/kjgpta/vectorsmith
Project-URL: Documentation, https://kjgpta.github.io/vectorsmith/
Project-URL: Issues, https://github.com/kjgpta/vectorsmith/issues
Project-URL: Changelog, https://github.com/kjgpta/vectorsmith/blob/main/CHANGELOG.md
Author: VectorSmith contributors
License: Apache-2.0
Keywords: agents,claude,codex,langchain,langgraph,mcp
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: argon2-cffi
Requires-Dist: httpx
Requires-Dist: jsonschema
Requires-Dist: lark
Requires-Dist: mcp>=1.2
Requires-Dist: polars>=1.0
Requires-Dist: pydantic>=2.7
Requires-Dist: pyyaml
Requires-Dist: ruamel-yaml
Requires-Dist: starlette
Requires-Dist: typer
Requires-Dist: uvicorn
Requires-Dist: watchfiles
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.40; extra == 'anthropic'
Provides-Extra: chroma
Requires-Dist: chromadb>=0.5; extra == 'chroma'
Requires-Dist: fastembed>=0.3; extra == 'chroma'
Provides-Extra: langchain
Requires-Dist: langchain-core>=0.3; extra == 'langchain'
Provides-Extra: langgraph
Requires-Dist: langchain-core>=0.3; extra == 'langgraph'
Requires-Dist: langgraph>=0.2; extra == 'langgraph'
Provides-Extra: milvus
Requires-Dist: fastembed>=0.3; extra == 'milvus'
Requires-Dist: pymilvus>=2.4; extra == 'milvus'
Provides-Extra: openai-agents
Requires-Dist: openai-agents>=0.2; extra == 'openai-agents'
Provides-Extra: pgvector
Requires-Dist: fastembed>=0.3; extra == 'pgvector'
Requires-Dist: psycopg[binary,pool]>=3.2; extra == 'pgvector'
Provides-Extra: pinecone
Requires-Dist: fastembed>=0.3; extra == 'pinecone'
Requires-Dist: pinecone>=5.0; extra == 'pinecone'
Provides-Extra: qdrant
Requires-Dist: fastembed>=0.3; extra == 'qdrant'
Requires-Dist: qdrant-client>=1.9; extra == 'qdrant'
Provides-Extra: weaviate
Requires-Dist: fastembed>=0.3; extra == 'weaviate'
Requires-Dist: weaviate-client>=4.0; extra == 'weaviate'
Description-Content-Type: text/markdown

# VectorSmith

**Your vector database, forged into tools an agent can actually use.**

Write a `tools.yaml`. VectorSmith compiles it into typed, tenant-guarded tools — then you either import them in Python or serve them over MCP.

[Docs](https://kjgpta.github.io/vectorsmith/) · [GitHub](https://github.com/kjgpta/vectorsmith) · [Changelog](https://github.com/kjgpta/vectorsmith/blob/main/CHANGELOG.md)

```bash
pip install "vectorsmith[qdrant]"
```

Store extras: `qdrant` · `pgvector` · `chroma` · `pinecone` · `weaviate` · `milvus` — [which stores ship](https://kjgpta.github.io/vectorsmith/vector-stores/).

## Two doors, one YAML

| You are building… | Install | Call |
|---|---|---|
| A **Python agent** (LangChain, LangGraph, OpenAI Agents, Anthropic SDK) | `pip install "vectorsmith[qdrant,langchain]"` | `from vectorsmith import load_tools` |
| A **chat / IDE host** (Claude Desktop, Claude Code, Codex, Cursor) | `pip install "vectorsmith[qdrant]"` so `vectorsmith` is on `PATH` | `vectorsmith serve tools.yaml --name invoices` |

The agent never sees the store URL, the API key, or hidden tenant filters.

```python
from vectorsmith import load_tools, connect

tools = load_tools("tools.invoices.yaml", env_file=".env")
# or
vs = connect("tools.invoices.yaml", env_file=".env")
rows = await vs.call("search_invoices", {"query": "Globex", "limit": 3})
await vs.aclose()
```

```json
{
  "mcpServers": {
    "invoices": {
      "command": "vectorsmith",
      "args": ["serve", "/absolute/path/tools.invoices.yaml", "--env-file", "/absolute/path/.env", "--name", "invoices"]
    }
  }
}
```

Host guides: [Claude Desktop](https://kjgpta.github.io/vectorsmith/integrations/claude-desktop/) · [Claude Code](https://kjgpta.github.io/vectorsmith/integrations/claude-code/) · [Codex](https://kjgpta.github.io/vectorsmith/integrations/openai-codex/) · [Cursor](https://kjgpta.github.io/vectorsmith/integrations/cursor/).

## Write a tool, not a prompt

```yaml
tds_version: "1"

connections:
  invoices:
    backend: qdrant
    url: ${QDRANT_URL}
    api_key: ${QDRANT_API_KEY:-}

tools:
  - name: search_invoices
    kind: search
    description: >
      Search invoices by free text and filter by client, status, or amount.
    target: { connection: invoices, collection: invoices }
    query: { param: query, required: false }
    static_filters:
      - { path: tenant, op: eq, value: acme }
    parameters:
      - { name: client, path: client_name, dtype: keyword, op: eq }
      - { name: status, path: status, dtype: keyword, op: in,
          enum: [draft, sent, paid, overdue] }
    output:
      fields: [invoice_id, client_name, status, amount]
```

`tenant: acme` is **not** in the model-facing schema. Full contract: [tools.yaml reference](https://kjgpta.github.io/vectorsmith/tools-yaml-reference/).

Apache-2.0. *Forge the tools. Keep the store.*
