The sink ships with a JSONB variant and is documented for asyncpg, but
the suite only ever exercised SQLite. The embeddings work will need
pgvector, so this adds a local Postgres stack and a way to run the
database tests on it, here and in CI.
- docker-compose.yml: ffb-postgres (pgvector/pgvector:pg16) on a private
network, published on 127.0.0.1 only, with an init script that adds
the vector extension to the test database and template1
- Makefile: pg-up/pg-down/pg-reset/pg-logs/pg-psql, test, test-pg,
test-all, lint; .env is generated from .env.example with a random
password, and FFB_TEST_DATABASE_URL from the environment wins over it
- tests: a db_url fixture parametrized over sqlite and postgres. The
postgres leg skips unless FFB_TEST_DATABASE_URL is set, and creates a
uniquely named database per test (with vector) that is dropped after.
The DatabaseSink factories in the events, retention, correlation,
soft-error and instrumentation tests now use it, so their 38 database
tests run on both. The missing-events-table test accepts either
backend's error. New tests check isolation and that vector works.
- asyncpg and pgvector added to the dev and test extras
- CI: a test-postgres job on FastMCP 2.12.2 and 4.x with a pgvector
service container, failing if the Postgres cases skip
- CONTRIBUTING: how to run the suite against Postgres
Production-ready feedback collection system for FastMCP servers.
Features:
- One-line integration with add_feedback_tools()
- Modular mixin architecture (SubmissionMixin, RetrievalMixin, ManagementMixin)
- Multi-database support (SQLite, PostgreSQL, MySQL)
- Privacy-compliant analytics with FeedbackInsights
- Server composition with create_feedback_server()
- Full type hints and Pydantic validation
- 97%+ test coverage
Installation:
uv add fastmcp-feedback
Documentation: https://fastmcp-feedback.l.supported.systems