Connects Claude to SQL Server, MySQL, PostgreSQL, SQLite, and Oracle databases through seven tools that let you list connections, inspect schemas with full column metadata and comments, query indexes, and run read-only SQL that returns CSV. The execute_sql tool handles writes but requires an explicit flag at startup. Built on .NET 10 with Dapper and SqlSugar, it auto-detects stdio mode when launched by MCP clients or falls back to HTTP/SSE for interactive use. You can preconfigure connections in appsettings.json or add them dynamically at runtime through the add_connection tool. Especially handy for Oracle users since it resolves synonyms and pulls comments from ALL_TAB_COMMENTS. Run it via dotnet or dnx once published to NuGet.
AdoMcp is a Model Context Protocol (MCP) server that helps large language models (LLMs) understand database structure, read table comments, and execute SQL queries.
AdoMcp 是一个基于 Model Context Protocol (MCP) 的数据库工具服务,帮助大型语言模型(LLM)理解数据库结构、读取表注释、执行 SQL 查询。
| Tool | Description |
|---|---|
list_connections | List configured database connections |
add_connection | Add (or replace) a database connection at runtime |
remove_connection | Remove a dynamically-added connection |
list_objects | List database objects (table/view/procedure/function/trigger/sequence/synonym, etc.) |
get_table_schema | Get table schema details (columns/types/nullability/PK/default/comments) |
get_table_indexes | Get table indexes |
query_sql | Execute read-only SQL and return CSV |
execute_sql | Execute write SQL (requires --allow-any-sql) |
To reduce mistakes (wrong database/schema/object), use tools in this order:
list_connections to discover available connections.add_connection.list_objects to locate schema + objectType + objectName.get_table_schema for column details (type, nullability, PK, default, comments).get_table_indexes when index/key design matters.query_sql only for read-only verification.execute_sql only when explicitly authorized and server is started with --allow-any-sql.Oracle note: objects without owner prefix may be synonyms. Always confirm the real schema via list_objects first.
| Database | Driver | Comment support |
|---|---|---|
| SQL Server | Microsoft.Data.SqlClient | MS_Description extended properties |
| MySQL / MariaDB | MySqlConnector | TABLE_COMMENT / COLUMN_COMMENT |
| PostgreSQL | Npgsql | obj_description / col_description |
| SQLite | Microsoft.Data.Sqlite | — (SQLite has no native comments) |
| Oracle | Oracle.ManagedDataAccess.Core | ALL_TAB_COMMENTS / ALL_COL_COMMENTS (includes PUBLIC synonyms) |
ORM support: Dapper · SqlSugarCore
Edit src/AdoMcp/appsettings.json and add pre-configured connections under the Databases array.
You can also skip this step entirely and let the LLM add connections dynamically via the add_connection tool.
"Databases": [
{
"Name": "mydb",
"DbType": "SqlServer",
"ConnectionString": "Server=localhost;Database=MyDb;User Id=sa;Password=***;TrustServerCertificate=true;",
"Description": "Main business database"
}
]
Supported DbType values: SqlServer | MySql | PostgreSql | Sqlite | Oracle
Security tip: Use .NET User Secrets or environment variables to manage connection strings in production.
When stdin is redirected (i.e. launched by an MCP client), stdio mode is used automatically.
When run interactively in a terminal, HTTP/SSE mode is used automatically.
dotnet run --project src/AdoMcp
# stdio mode (all logs go to stderr; stdout carries only MCP JSON-RPC)
dotnet run --project src/AdoMcp -- --stdio
# HTTP/SSE mode (default: http://localhost:5100, MCP endpoint /mcp)
dotnet run --project src/AdoMcp -- --http
# Via environment variable
ADOMCP_MODE=http dotnet run --project src/AdoMcp
By default the execute_sql tool is disabled to prevent unauthorised writes.
Add --allow-any-sql to enable it:
dotnet run --project src/AdoMcp -- --allow-any-sql
# Combine with transport mode
dotnet run --project src/AdoMcp -- --http --allow-any-sql
After the package is published to NuGet.org, you can run it without cloning the repo:
# Install as a global .NET tool once, then run directly
dotnet tool install -g AdoMcp
adomcp
# Or use dnx (.NET 10+) — installs and runs on demand
dnx AdoMcp
dnx AdoMcp -- --allow-any-sql
LLMs can add new database connections during a session using add_connection:
User: Connect me to Oracle database oradb01
LLM → calls add_connection(
connectionString = "Data Source=oradb01:1521/PROD;User Id=appuser;Password=***;",
dbType = "Oracle",
name = "prod-oracle",
description = "Production Oracle DB"
)
→ returns: Connection 'prod-oracle' (Oracle) added successfully.
LLM → calls list_objects(connectionName = "prod-oracle")
Dynamically-added connections exist only for the lifetime of the process; restart the server or add the connection to appsettings.json for persistence.
{
"mcpServers": {
"adomcp": {
"command": "dnx",
"args": ["-y","AdoMcp"]
}
}
}
Start the server first:
dnx -y AdoMcp -- --http
Then configure the client:
{
"mcpServers": {
"adomcp": {
"url": "http://localhost:5100/mcp"
}
}
}
All environment variables are prefixed with ADOMCP_ (override appsettings.json):
| Variable | Description |
|---|---|
ADOMCP_MODE | Transport mode: stdio or http (auto-detected when not set) |
ADOMCP_URLS | HTTP listen address, e.g. http://0.0.0.0:5100 |
This repository now includes server.json for the official MCP Registry with the server name io.github.John0King/adomcp.
To publish to the official MCP Registry:
AdoMcp to NuGet.org.v1.0.1, or manually run the Publish to NuGet and MCP Registry GitHub Actions workflow.server.json to the MCP Registry.# Build
dotnet build
# Pack as a NuGet tool (supports dnx)
dotnet pack src/AdoMcp -c Release -o ./nupkg
# Publish to NuGet.org (set NUGET_API_KEY first)
dotnet nuget push ./nupkg/AdoMcp.*.nupkg --source https://api.nuget.org/v3/index.json --api-key $NUGET_API_KEY