Every call, with its outcome
Tool, duration, outcome, caller and payload sizes, to stderr, a callback or SQLite and PostgreSQL tables. Secrets are redacted before anything is stored.
Measured on release 2026.10.01.2, 1 October 2026, with the PostgreSQL tests enabled.
FastMCP Feedback is a Python package for FastMCP servers. A middleware records each tool call with its timing, outcome and caller, and a set of feedback tools lets anyone using the server file a report that arrives with the calls behind it.
uv add "fastmcp-feedback[instrumentation]"The base package (uv add fastmcp-feedback) covers the middleware with stderr
output and the feedback tools; the instrumentation extra adds database
storage. All extras are listed under Installation and extras.
from fastmcp import FastMCPfrom fastmcp_feedback.instrumentation import instrument
app = FastMCP("My Server")instrument(app) # one JSON line per tool call on stderrRecording happens off the call path, through a bounded queue: it never slows a tool down and never turns a working call into a failing one.
Every call, with its outcome
Tool, duration, outcome, caller and payload sizes, to stderr, a callback or SQLite and PostgreSQL tables. Secrets are redacted before anything is stored.
Errors returned as data
Results like {"status": "failed"} count as soft errors, so error rates
include tools that never raise.
Reports with evidence
submit_feedback attaches the reporter’s recent calls, so “the render tool
hung” comes with the render calls.
Search by meaning
Embed reports, errors and event text with pgvector, and ask whether anyone has seen this before.
The rest of the site is organized by what you need: how-to guides for specific tasks such as storing records in Postgres or recording background jobs, reference pages for every parameter and table, and explanations of the architecture and of how reports are matched to calls.