[HN Gopher] Show HN: Cloud-Ready Postgres MCP Server
___________________________________________________________________
Show HN: Cloud-Ready Postgres MCP Server
Hey HN, I built pg-mcp, a Model Context Protocol (MCP) server for
PostgreSQL that provides structured schema inspection and query
execution for LLMs and agents. It's multi-tenant and runs over
HTTP/SSE (not stdio) Features - Supports multiple database
connections from multiple agents - Schema Introspection: Returns
table structures, types, indexes and constraints; enriched with
descriptions from pg_catalog. (for well documented databases) -
Read-Only Queries: Controlled execution of queries via MCP. -
EXPLAIN Tool: Helps smart agents optimize queries before execution.
- Extension Plugins: YAML-based plugin system for Postgres
extensions (supports pgvector and postgis out of the box). -
Server Mode: Spin up the container and it's ready to accept
connections at http://localhost:8000/sse
Author : spennant
Score : 154 points
Date : 2025-03-30 03:14 UTC (19 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| runako wrote:
| I'm still trying to grok MCP, would be awesome if you could
| include usage examples in the doc.
|
| Good luck!
| mparis wrote:
| +1
|
| My first foray into using MCP was via Claude Desktop. Would be
| great if you packaged your tool such that one could add it with
| a few lines in their '~/Library/Application
| Support/Claude/claude_desktop_config.json'
| jamestimmins wrote:
| Same here. Tonight I added Whatsapp to Claude Desktop via
| Luke Harries' https://github.com/lharries/whatsapp-mcp. Very
| solid intro into how it all works.
| teaearlgraycold wrote:
| The main things that made MCP hard for me to understand at
| first is that it's both transport agnostic (so no leveraging
| semantic HTTP) and is an async task management protocol as well
| as a tool use protocol. The name itself is also poorly chosen.
| I would call it Tool Use Protocol.
|
| Think about each MCP implementer like an agent's input/output
| device.
| romanovcode wrote:
| It's very simple and this is actually good example.
|
| 1. You add this MCP to your DB (make sure it is securely
| connected to your AI of choice of course)
|
| 2. Ask anything about your data, ask to make graphs, ask to
| make scheduled tasks, ask to analyze queries and show
| optimizations and so on.
|
| 3. Profit, literally. No need to pay BI companies thousands
| each month.
| saberience wrote:
| It's not complicated at all.
|
| All it does is expose methods as a "tool" which is then brought
| back to your LLM and defined with its name, description and
| input parameters.
|
| E.g. Name: "MySqlTool", Description: "Allows arbitrary MySQL
| queries to the XYZ database", Parameters: "string:
| sqlToExecute"
|
| The MCP Client (e.g. Claude Desktop, Claude Code), is
| configured to talk to an MCP server via stdio or sse, and calls
| a method like "tools/list", the server just sends a list back
| (in JSON) of all the tools, names, descriptions, params.
|
| Then, if the LLM gets a query that mentions e.g. do a web
| search, or a web scraping, etc, it just outputs a tool use
| token then stops inferencing. Then the code calls that tool via
| stdio/sse (json-rpc), to the MCP server, which just runs that
| method, returns the result, then its added to the message
| history in the LLM, then inferencing runs again from the
| beginning.
| runako wrote:
| I think people who have been building with LLMs have a
| different view on what is complicated vs not :-)
|
| It may be easy for you to configure, but you dropped some
| acronyms in there that I would have to look up. I have
| definitely not personally set up anything like this.
| bavell wrote:
| It's basically a simple rpc server, there's nothing
| complicated going on...
| runako wrote:
| Then please write up and share here some example usage
| documentation for someone who has never used MCP. (That
| was my suggestion upthread.)
|
| As a side note, do people here not realize that less
| complicated examples are often better for learning? Have
| we as a community forgotten this basic truism?
|
| Since it's not complicated, you should be able to write
| it up quickly, and parallel commmenters to mine suggest
| there is an audience for such documentation.
|
| Thanks!
| 1zael wrote:
| This is wild. Our company has like 10 data scientists writing SQL
| queries on our DB for business questions. I can deploy pg-mcp for
| my organization so everyone can use Claude to answer whatever is
| on their mind? (e.x."show me the top 5 customers by total sales")
|
| sidenote: I'm scared of what's going to happen to those roles!
| otabdeveloper4 wrote:
| Probably nothing. "Expose the database to the pointy-haired
| boss directly, as a service" is an idea as old a computing
| itself. Even SQL itself was originally an iteration of that
| idea. Every BI system (including PowerBI and Tableau) were
| supposed to be that.
|
| It doesn't work because the PHB doesn't have the domain
| knowledge and doesn't know which questions to ask. (No, it's
| never as simple as group-by and top-5.)
| jaccola wrote:
| I would say SQL still is that! My wife had to learn some SQL
| to pull reports in some non-tech finance job 10 years ago. (I
| think she still believes this is what I do all day...)
|
| I suppose this could be useful in that it prevents everyone
| in the company having to learn even the basics of SQL which
| is some barrier, however minimal.
|
| Also the LLM will presumably be able to see all the
| tables/fields and 'understand' them (with the big assumption
| that they are even remotely reasonably named) so English
| language queries will be much more feasible now. Basically
| what LLMs have over all those older attempts is REALLY good
| fuzziness.
|
| I see this being useful for some subset of questions.
| pclmulqdq wrote:
| A family friend maintains a SQL database of her knitting
| projects that she does as a hobby. The PHB can easily learn
| SQL if they want.
| conradfr wrote:
| But he doesn't.
|
| The project manager also won't learn behat and write tests.
|
| Your client also won't use the CMS to update their website.
| Kiro wrote:
| There are hundreds of text-to-SQL companies and integrations
| already. What's different about this that makes you react like
| that?
| romanovcode wrote:
| Those companies will be dead once this goes mainstream. Why
| pay to a 3rd party company when you can ask LLM to create
| graphs and analysis of whatever you want. Pair it with
| scheduled tasks and I really don't see any value in those
| SaaS products.
| slt2021 wrote:
| there are a lot of nuances in Business Analytics, you maybe
| can get away with GenAI for naiive questions like "Who are
| my top5 customers?", but thats not the type of insight
| usually needed. Most companies already know their top5
| customers by heart and these don't change a lot.
|
| Nuanced BI analytics can have a lot of toggles and filters
| and drilldowns, like compare sales of product A in category
| B subcategory C, but only for stores in regions X,Y and
| that one city Z during time periods T1, T2. and out of
| these sales, look at sales of private brand vs national
| brand, and only retail customers, but exclude purchases via
| business credit card or invoiced.
|
| with every feature in a DB (of which there could be
| thousands), the number of permutations and dimensions grows
| very quickly.
|
| whats probably going to happen, is simple questions could
| be self-served by GenAI, but more advanced usage is still
| needed interention by specialist. So we would see some
| improvement in productivity, but people will not lose jobs.
| Perhaps number of jobs could even increase due to increased
| demand for analytics, as it often happens with increased
| efficiency/productivity (Jevon's paradox)
| Kiro wrote:
| Those companies and integrations are already using LLMs.
| That's the whole point. I'm only talking about LLM
| products, many of which are free and open source. This has
| been mainstream for years.
| a-dub wrote:
| is that true? i'd like that, but i get the sense that this mcp
| stuff is more oriented around programming assistant and agent
| applications.
|
| i suppose the desktop app can use it, but how good is it for
| this general purpose "chat with the database for lightweight
| analytics" use cases is it worth the trouble of dealing with
| some electron app to make it work?
| sshine wrote:
| > _i get the sense that this mcp stuff is more oriented
| around programming assistant and agent applications_
|
| Agents will become ubiquitous parts of the user interface
| that is currently the chat.
|
| So if you bother with a website or an electron app now, MCP
| will just add more capabilities to what you can control using
| agents.
| a-dub wrote:
| yeah, i understand the premise. my question revolves around
| how well it actually works today for bi style applications.
| specifically, how close is it to being something that you
| can just drop in as a smart query and plotting interface
| rather than a bi stack that is built around something like
| tableau.
|
| when i've read through documentation for mcp servers, it
| seems like the use cases they've mostly been focused on are
| improving effectiveness of programming assistants by
| letting them look at databases associated with codebases
| they're looking to modify.
|
| i understand that these things are meant to be generic in
| nature, but you never really know if something is fit for
| purpose until it's been used for that purpose. (at least
| until agi, i suppose)
| moltar wrote:
| There are LLM SQL benchmarks. [1] And state of the art solution
| is still only at 77% accuracy. Would you trust that?
|
| [1] https://bird-bench.github.io/
| flappyeagle wrote:
| Yes. Ask it to do it 10 times and pick the right answer
| pclmulqdq wrote:
| That only works if you assume the fail cases are
| uncorrected. Spoiler alert: they are not.
| flappyeagle wrote:
| Ask 10 different models then
| pclmulqdq wrote:
| Same problem: The models are also correlated on what they
| can and can't solve.
|
| To give you an extreme example, I can ask 1000000
| different models for a counterexample to the 3n + 1
| problem, and all will get it wrong.
| flappyeagle wrote:
| No. What a bizarre example to choose. This is so easy to
| demonstrate. They will all come back with the exact same
| correct answer
| pclmulqdq wrote:
| If it's so easy, go do it. You can publish the result in
| any math journal you like with just a title and a number,
| because this is one of the hardest problems in
| mathematics.
|
| For reference:
| https://en.wikipedia.org/wiki/Collatz_conjecture
| flappyeagle wrote:
| My guy, every LLM has read Wikipedia
| pclmulqdq wrote:
| I don't know if you're purposely being dense. The first
| sentence of Wikipedia is that this is a famous unsolved
| problem.
|
| So no, sampling 1000000 LLMs will not get you a solution
| to it. I guarantee you that.
| clusterfook wrote:
| Yep gonna be easy
|
| Q: show me the top 5 customers by total sales
|
| A: System.Data.Odbc.OdbcException (0x80131937): ERROR [57014]
| ERROR: canceling statement due to statement timeout;
|
| Q: Why do I get this error
|
| A: Looks like it needs an index, let me create that for you.
| Done. Rerunnign query.
|
| could not close temporary statistics file
| "pg_stat_tmp/global.tmp": No space left on device
|
| Q: Why this error
|
| A: 429 Too Many Requests
|
| Rub hands... great next 10 years to be a backend dev.
| fullstackchris wrote:
| and the next 10 after that, and the next 10 after that,
| and...
| curious_cat_163 wrote:
| That's a good example of a worst case scenario. This is why
| we would still need humans loitering about.
|
| The question is do they still need 10? Or 2 would suffice?
| How about 5?
|
| This does not need to be a debate about the absolutes.
| slt2021 wrote:
| didn't Tableau (and some other BI solutions) have this feature
| out of the box?
| risyachka wrote:
| So you will ask "What is our churn?", get a random result, and
| then turn your whole marketing strategy around wrong number?
|
| Thats cute.
| spennant wrote:
| It won't be that easy. First off, most databases in the wild
| are not well documented. LLMs benefit from context, and if your
| tables/columns have non-intuitive or non-descriptive names, the
| SQL may not even work. Second, you might benefit from an LLM
| fine-tuned on writing code and/or an intelligent Agent that
| checks for relevancy and ambiguity in user input prior to
| attempting to answer the question. It would also help if the
| agent executed the query to see how it answered the user's
| question. In other words "reasoning"... pg-mcp simply exposes
| the required context for Agents to do that kind of reasoning.
| nickdichev wrote:
| The COMMENT command will finally be useful :)
| dinfinity wrote:
| Then let the AI first complete the documentation by looking
| at the existing documentation, querying the DB (with pg-mcp),
| etc.
|
| Do human reviewing and correcting of the updated
| documentation. Then ensure that the AI knows that the
| documentation might still contain errors and ask it to do the
| 'actual' work.
| revskill wrote:
| Everytime i see a cloud API_KEY is required, i'm off.
| Jaxkr wrote:
| Well the key it wants is for Anthropic and you can't run those
| models locally.
| spennant wrote:
| The pg-mcp server doesn't need an API key. Those variables are
| only needed to run the example claude-client. You can write
| your own agent to talk to whatever LLM you like.
| fulafel wrote:
| From docker-compose ports: -
| "8000:8000"
|
| This will cause Docker to expose this to the internet and even
| helpfully configure an allow rule to the host firewall, at least
| on Linux.
| rubslopes wrote:
| Good catch.
|
| OP, exposing your application without authentication is a
| serious security risk!
|
| Quick anecdote: Last week, I ran a Redis container on a VPS
| with an exposed port and no password (rookie mistake). Within
| 24 hours, the logs revealed someone attempting to make my Redis
| instance a slave to theirs! The IP traced back to Tencent, the
| Chinese tech giant... Really weird. Fortunately, there was
| nothing valuable stored in it.
| acheong08 wrote:
| > The IP traced back to Tencent, the Chinese tech giant...
| Really weird.
|
| They're a large cloud provider in Asia like Amazon AWS or
| Microsoft Azure. I doubt such a tech company would make it
| that obvious when breaking the law.
| spennant wrote:
| I made a few assumptions about the actual deployer and their
| environment that I shouldn't have... I'll need to address
| this. Thanks!
| tudorg wrote:
| This is great, I like in particular that there are extensions
| plugins. I'll be looking at integrating this in the Xata Agent
| (https://github.com/xataio/agent) as custom tooling.
| spennant wrote:
| Xata.io looks very interesting!!! I was thinking about building
| an intelligent agent for pg-mcp as my net project but it looks
| like you did a lot of the hard work already. When thinking
| about the "AI Stack" I usually separate concerns like this:
| UI <--> Agent(s) <--> MCP Server(s) <--> Tools/Resources
| | LLM(s)
| oulipo wrote:
| Nice!
|
| What I'd be looking for is a MCP server where I can run in
| "biz/R&D exploration-mode", eg:
|
| - assume I'm working on a replica (shared about all R&D
| engineers) - they can connect and make read-only queries to the
| replica for the company data - they have a temporary read-write
| schema just for their current connection so they can have
| temporary tables and caches - temporary data is deleted when they
| close the session
|
| How could you make a setup like that so that when using your MCP
| server, I'm not worried about the model / users modifying the
| data, but only doing their own private queries/tables?
| saberience wrote:
| Just for everyone here, the code for "building an MCP server", is
| importing the standard MCP package for Typescript, Python, etc,
| then writing as little as 10 lines of code to define something is
| an MCP tool.
|
| Basically, it's not rocket science. I also built MCP servers for
| Mysql, Twilio, Polars, etc.
| runako wrote:
| From HN guidelines:
|
| > Please don't post shallow dismissals, especially of other
| people's work. A good critical comment teaches us something.
|
| We are hackers here. Building is good. Sharing is good. All
| this is true even if you personally know how to do what is
| being shared, and it is easy for you. I promise you there are
| people who encounter every sharing post here and do not think
| what is posted is easy.
| brulard wrote:
| I think we exactly need to hear things like that. This is
| what I was wondering. Why is every MCP project such a big
| news? Isn't it just a few lines of code?
| runako wrote:
| Is this really "big news" or is it a GitHub link titled
| "Show HN"?
|
| Is there a glitzy corporate PR page trying to sell
| something, or is this just code for people to read?
|
| Did Ars Technica breathlessly cover it, or did a random
| hacker post and share something they worked on?
|
| If it's the work of a random hacker not promoted by media
| outlets, who benefits from negative comments about that
| person's work?
|
| Is it possible that there are at least some people who read
| this site who know less about the topics covered than you
| do, and so might find this interesting or useful?
|
| When you post something, will it help you to improve if
| people post non-constructive negative feedback? Will
| dismissive comments like these make you more or less likely
| to show your work publicly?
|
| Just food for thought...
| BoorishBears wrote:
| I'm not so sure why you're writing so much against a
| reasonable clarification that was made.
|
| MCP is getting trendy, but a lot of people being drawn in
| can't find the actual meat of what it is outside of self-
| referential definitions.
|
| Someone pointing out the reason for the flood of MCP
| servers being how trivial they are to implement is a
| helpful data point. Simple as that.
| runako wrote:
| > MCP is getting trendy, but a lot of people being drawn
| in can't find the actual meat of what it is outside of
| self-referential definitions.
|
| My comment was against the shallow dismissal. Do you
| think that the negative comments helped anyone locate the
| meat of what it is? Did they clarify or educate?
|
| Even the infamous Dropbox comment[1] was more
| constructive. I gently push back in the hope that we can
| have better discussions here than on other sites.
|
| 1 - https://news.ycombinator.com/item?id=9224
| asdev wrote:
| 5% hackers, 95% FANG employees who think this is meaningless
| spennant wrote:
| I built this to fill a specific need. It's not really made to
| talk to Claude Desktop (although it can). It's built to take
| multiple connections from agents who bring their own LLM (via
| API key or whatever) and provide context to the LLM model. Yes,
| it does import the standard Python MCP package, however it does
| quite a few non-standard things in order to achieve the multi-
| tenancy. I encourage you to look at the code.
| koakuma-chan wrote:
| What is multi-tenancy?
| spennant wrote:
| Just a fancy way of saying that multiple agents (with their
| own LLMs) can concurrently connect, also that pg-mcp can
| simultaneously connect to multiple Postgres servers as
| well.
| yroc92 wrote:
| User isolation in a single data store. Basically, many
| customers sharing a single database securely without
| sharing their data.
| esafak wrote:
| You do have to implement every functionality that you want to
| expose.
| jillesvangurp wrote:
| Is there more to MCP than being a simple Remote Procedure Call
| framework that allows AI interactions to include function calls
| driven by the AI model? The various documentation pages are a bit
| hand wavy on what the protocol actually is. But it sounds to me
| that RPC describes all/most of it.
| spennant wrote:
| Indeed. Anything you do with MCP can be done in more
| traditional ways.
| doug_durham wrote:
| The biggest contribution is the LLM compatible metadata that
| describes the tool and its argument. It is trivial to adopt. In
| python you can use FASTMcp to add a decorator to a function,
| and as long as that function returns a JSON string you are in
| business. The decorator extracts the arguments and doc strings
| and presents that to the LLM.
| jillesvangurp wrote:
| What makes a spec LLM compatible? I've thrown a lot of
| different things at gpt o1 and it generally understands them
| more better than I do. OpenAI specifications, unstructured
| text, log output, etc.
| ahamilton454 wrote:
| I don't understand the advantage of having the transport protocol
| be HTTP/SSE rather than studio especially in this case when it's
| literally running locally.
| spennant wrote:
| The use case for pg-mcp is server deployment - local running is
| just for dev purposes. HTTP/SSE enables multiple concurrent
| connections and network access, which stdio can't provide.
| scottpersinger wrote:
| Where's the pagination? How does a large query here not blow up
| my context:
|
| https://github.com/stuzero/pg-mcp/blob/main/server/tools/que...
___________________________________________________________________
(page generated 2025-03-30 23:01 UTC)