{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_g9h5tersfja2","handle":"tai42-mcp-dynamic-postgres","url":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres","links":{"self":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres/record.json","html":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres","markdown":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres/record.md","api":"https://wellknown.network/api/v1/agents/tai42-mcp-dynamic-postgres","status":"https://wellknown.network/api/v1/agents/tai42-mcp-dynamic-postgres/status","claim":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres/claim.json","badge":"https://wellknown.network/agents/tai42-mcp-dynamic-postgres/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:tai42-mcp-dynamic-postgres","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"tai42-mcp-dynamic-postgres","summary":"Schema-driven generator for safe, scoped PostgreSQL DML tools in FastMCP agent systems","description":"# tai42-mcp-dynamic-postgres\n\n[![CI](https://github.com/tai42ai/tai42-mcp-dynamic-postgres/actions/workflows/ci.yml/badge.svg)](https://github.com/tai42ai/tai42-mcp-dynamic-postgres/actions/workflows/ci.yml)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n\nSchema-driven generator for **safe, scoped PostgreSQL DML tools** in\n[FastMCP](https://github.com/jlowin/fastmcp) agent systems.\n\nPoint it at a PostgreSQL database and it introspects the schema and generates one\ntyped MCP tool per DML operation per table — `insert`, `select`, `update`,\n`delete`, plus optional `select_joined`. The agent gets exactly those tools and\nnothing else: no raw SQL, no schema changes, no access to tables you didn't\nexpose.\n\n## Why\n\nGiving an agent database access usually means choosing between read-only access\nor risking that the agent runs arbitrary SQL and changes data or settings you\nnever intended. This project gives you a controlled middle ground: a fixed set\nof generated, validated, parameterized tools scoped to the tables and operations\nyou choose.\n\n## What it does\n\n- Introspects your schema (tables, columns, types, foreign keys, `pgvector`).\n- Generates a FastMCP tool per DML operation per table, each with a dedicated\n  Pydantic input model derived from the table.\n- Supports rich, **injection-safe** filtering (`WhereFilter`) and ordering,\n  including vector KNN search.\n- Excludes chosen columns from generated tool inputs (e.g. `id`, `created_at`).\n- Exposes only the generated tools — never raw SQL or DDL.\n\n## Security model\n\n> [!IMPORTANT]\n> The generated tool layer controls *which operations exist*; the PostgreSQL\n> role you connect as controls *what those operations can physically do*.\n> **Connect as a dedicated least-privilege role, never a superuser.**\n> Read [SECURITY.md](SECURITY.md) before deploying.\n\nHighlights, in full detail in [SECURITY.md](SECURITY.md):\n\n- Filter/order field names are validated against real columns and emitted…","publisher":null,"homepage":"https://tai42.ai","repository":"https://github.com/tai42ai/tai42-mcp-dynamic-postgres/blob/main/CHANGELOG.md","version":"0.5.0","license":null,"protocols":["mcp"],"tags":["postgresql","mcp","fastmcp","agents","llm","tools","pgvector"],"pricing":null,"endpoints":[{"url":"pypi:tai42-mcp-dynamic-postgres","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":1,"provenance":"declared"}],"categories":["data"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"tai42-mcp-dynamic-postgres","registry":"pypi","observedAt":"2026-09-10T13:21:49.192Z","publishedAt":"2026-08-20T22:08:25.599578Z","latestVersion":"0.5.0"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"tai42-mcp-dynamic-postgres","url":"https://pypi.org/project/tai42-mcp-dynamic-postgres/","firstSeenAt":"2026-09-10T13:20:42.576Z","fetchedAt":"2026-09-10T13:20:42.576Z","normalizedAt":"2026-09-10T13:20:42.576Z"}]},"firstSeenAt":"2026-09-10T13:20:42.576Z","updatedAt":"2026-09-10T13:21:49.192Z"}