database_mcp_postgres/
handler.rs1use database_mcp_server::server_info;
7use rmcp::model::ServerInfo;
8
9use super::PostgresAdapter;
10
11const DESCRIPTION: &str = "Database MCP Server for PostgreSQL";
13
14const INSTRUCTIONS: &str = r"## Workflow
16
171. Call `list_databases` to discover available databases.
182. Call `list_tables` with a `database_name` to see its tables.
193. Call `get_table_schema` with `database_name` and `table_name` to inspect columns, types, and foreign keys before writing queries.
204. Use `read_query` for read-only SQL (SELECT, SHOW, EXPLAIN).
215. Use `write_query` for data changes (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP).
226. Use `create_database` to create a new database.
23
24Tools accept an optional `database_name` parameter to query across databases without reconnecting.
25
26## Constraints
27
28- The `write_query` and `create_database` tools are hidden when read-only mode is active.
29- Multi-statement queries are not supported. Send one statement per request.";
30
31#[rmcp::tool_handler(router = self.build_tool_router())]
32impl rmcp::ServerHandler for PostgresAdapter {
33 fn get_info(&self) -> ServerInfo {
34 let mut info = server_info();
35 info.server_info.description = Some(DESCRIPTION.into());
36 info.instructions = Some(INSTRUCTIONS.into());
37 info
38 }
39}