flamerobin-mcp-server
# flamerobin-mcp-server
A Model Context Protocol (MCP) server for Firebird databases intended for **local use**. It reads connection details from [FlameRobin's](http://www.flamerobin.org/) `fr_databases.conf` so no extra configuration is needed — if you have FlameRobin set up with your Firebird databases, this server works out of the box.
## Compared to [mcpFirebird](https://github.com/PuroDelphi/mcpFirebird)
| | This project | mcpFirebird |
|---|---|---|
| **Credentials** | Read automatically from FlameRobin's config — no setup required | Must pass `--user`, `--password`, `--host`, `--database` on every launch |
| **Multi-database** | All FlameRobin-registered databases available in one session | Single database per server instance |
| **Wire encryption** | Supported (native Firebird .NET driver) | Not supported — requires `WireCrypt = Disabled` on the server |
| **Runtime** | .NET 9 self-contained executable | Node.js / npm |
| **Schema introspection** | Tables, views, procedures, triggers, generators, roles, FK/PK/constraints, execution plans, missing index analysis | Tables and basic schema |
| **DDL / DML / scripts** | Yes — `ExecuteDdl`, `ExecuteDml`, `ExecuteScript` | SQL execution only |
| **Deployment** | Local only — runs on your PC alongside FlameRobin | Cloud-deployable via Smithery, SSE/HTTP transports |
## Building
```
dotnet build FirebirdMcp.csproj
```
## Publishing a single self-contained executable
```
dotnet publish FirebirdMcp.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publish-single
```
The output is `publish-single\FirebirdMcp.exe`. The `publish-single\` folder is gitignored.
## Claude Desktop configuration
Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"firebird": {
"command": "C:\\path\\to\\publish-single\\FirebirdMcp.exe",
"env": {
"Logging__LogLevel__Default": "None"
}
}
}
}
```
> **Important:** The `Logging__LogLevel__Default=None` env var is required. The server's startup log output is written to stdout, which Claude reads as part of the MCP handshake — any unexpected output causes Claude to fail to recognize the server.
## Tools
| Tool | Description |
|------|-------------|
| `ListDatabases` | List all servers/databases registered in FlameRobin |
| `ListObjects` | List tables, views, or both — with optional regex filter |
| `ListProcedures` | List stored procedures — with optional regex filter |
| `ListTriggers` | List triggers — with optional regex filter |
| `ListGenerators` | List generators/sequences with current values |
| `ListRoles` | List roles — with optional regex filter |
| `DescribeTable` | Column definitions — supports `brief` mode and column filter |
| `GetForeignKeys` | FK relationships for a table (`in`, `out`, or `all` directions) |
| `GetTableConstraints` | PK, FK, UNIQUE, CHECK constraints for a table |
| `GetProcedureSource` | PSQL source of a stored procedure |
| `GetTriggerSource` | PSQL source of a trigger |
| `GetViewSource` | SQL source of a view |
| `GetExecutionPlan` | Execution plan for a SELECT — shows index usage |
| `AnalyzeMissingIndexes` | Which columns lack indexes; optionally scoped to filter columns |
| `GetDatabaseInfo` | ODS version, page size, dialect, etc. |
| `ListActiveConnections` | Active connections to the database |
| `RunQuery` | Execute a SELECT — supports `maxRows` and `columns` projection |
| `ExecuteDdl` | Execute CREATE/ALTER/DROP and commit |
| `ExecuteDml` | Execute INSERT/UPDATE/DELETE and commit |
| `ExecuteScript` | Execute multiple semicolon-separated statements |
TDQS
Scored across 29 tools
Every tool has a clearly distinct purpose. Overlapping tool pairs like describe_table/inspect_table and get_table_constraints/get_foreign_keys are well-differentiated by their descriptions, and no two tools perform the same function.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., analyze_missing_indexes, execute_dml, run_query). No mixing of styles or vague verbs.
29 tools is appropriate for a comprehensive database management server. The count covers schema exploration, data manipulation, execution, and administrative tasks without being bloated or thin.
The tool set covers the full lifecycle of database interaction: schema discovery (describe, inspect, list), DML/DDL execution, querying, constraint and index analysis, and administrative utilities. Missing features like user management are peripheral to the server's core purpose.