simo21-ss

fitbro-mcp-server

Community simo21-ss
Updated

fitbro-mcp-server

A Model Context Protocol server giving Claude (and other MCPclients) read-only access to a running FitBro local environment: Postgres, the app's logs,WireMock's logs, the automation suite's logs — plus an on-demand Cucumber run.

Runs as a sidecar in the FitBroLocal stack on port 8418, servinghttp://localhost:8418/mcp.

What it exposes

Tool Purpose
fitbro_pg_list_schemas List non-system schemas
fitbro_pg_list_tables List tables in a schema
fitbro_pg_describe_table Columns, types, constraints
fitbro_pg_query Read-only SELECT (auto-LIMIT, SET TRANSACTION READ ONLY)
fitbro_app_logs Spring app logs (Docker socket, host-file fallback for IDE runs)
fitbro_wiremock_logs WireMock verbose logs — every request, match and response
fitbro_postgres_logs Postgres container logs
fitbro_tests_logs Automation suite logs (host file only)
fitbro_liquibase_logs fitbro_app_logs filtered to lines mentioning liquibase
fitbro_run_cucumber Run the automation suite in the test-runner container

All log tools accept tail, since (ISO 8601), until and grep (case-insensitive substring).Rotated archives (*.YYYY-MM-DD.log.gz) are decompressed and included when since reaches back.

Running it

It is a service of the FitBroLocal stack, which builds this repo by path — the repos must sit sideby side:

cd ../FitBroLocal/docker && ./run.sh up

Then register it once with Claude Code:

claude mcp add --transport http fitbro-mcp-local http://localhost:8418/mcp

Configuration

Everything is environment variables, set by FitBroLocal's compose file. The defaults assume thatstack.

Variable Default Notes
POSTGRES_HOST / PORT / USER / PASSWORD / DB postgres / 5432 / fitbro_user / fitbro_password / fitbro Reached over the Compose network, so the service name
FITBRO_APP_CONTAINER fitbro-local-fitbro-1 Container name, resolved through the Docker socket
FITBRO_WIREMOCK_CONTAINER fitbro-local-wiremock-1
FITBRO_POSTGRES_CONTAINER fitbro-local-postgres-1
FITBRO_TEST_RUNNER fitbro-local-fitbro-test-runner-1
FITBRO_AUTOMATION_TASK test Gradle task run in the test runner

The container names are Compose-generated (<project>-<service>-<n>) rather than pinned, because abare container_name: postgres collides with every other stack on the machine. If you rename theCompose project, these have to move with it.

How logs reach it

The app and the suite write to ~/fitbro-logs/<app>/<app>.log through their logback configs;WireMock writes there too via the config FitBroLocal bind-mounts. This container gets ~/fitbro-logsmounted read-only at /host-logs, so each tool has two routes:

Service In Docker On the host (IDE run)
Spring app Docker socket ~/fitbro-logs/fitbro-application/fitbro-application.log
WireMock Docker socket ~/fitbro-logs/fitbro-wiremock-application/wiremock.log
Automation suite n/a — it runs on the host ~/fitbro-logs/fitbro-tests-application/…
Postgres Docker socket n/a

Implementation note

Built on the MCP Python SDK 2.x (MCPServer). Tool schemas are derived from the functionsignatures, and the SDK serves streamable HTTP itself — there is no Starlette or uvicorn wiring here.

Scope

Local development only. It is read-only by construction — fitbro_pg_query opens a read-onlytransaction and rolls back — but it exposes a database and a Docker socket, so it has no businessanywhere but a developer's machine. There is no auth on the endpoint.

MCP Server · Populars

MCP Server · New