[{"data":1,"prerenderedAt":176},["ShallowReactive",2],{"project-47564620":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":34,"aspects":35,"strip":37,"post_text":30,"what":40,"said":63,"maker_in_thread":104,"shape":114,"grid":117,"attempts":135,"same_week":140,"maker_shows":34,"maker_hidden":169,"reader_version":170,"card":171},"47564620","Pglens","27 read-only PostgreSQL tools for AI agents via MCP","title","Show HN: Pglens – 27 read-only PostgreSQL tools for AI agents via MCP","https:\u002F\u002Fgithub.com\u002Fjanbjorge\u002Fpglens","github.com","jeeybee",1774801836,2026,13,7,2589,4366,60,"shown","dev_tools","database tooling for ai agents","library",[24,25,26,27,28],"postgresql","mcp","ai agents","read-only","database introspection","quiet",null,{"positive":32,"neutral":32,"mixed":33,"critical":33},2,0,4,{"design":36},{"positive":32,"critical":33},[33,38,33,39,39,33,38,33,33],3,5,{"problem":41,"audience":30,"pricing":30,"motivation":30,"time_to_build":30,"stack":48,"openness":61,"stage":62,"team_size":62},{"value":42,"source":43,"evidence":44},"AI agents guess column values, enum casing and join paths when querying Postgres, and retry until something works","maker",[45],{"id":46,"by":11,"text":47},"47564630","Most Postgres MCP servers expose query and list_tables. Agents end up guessing column values, enum casing, and join paths - then retrying until something works. pglens gives…",[49,54,58],{"value":50,"source":51,"evidence":52},"Python","inferred",[53],{"id":46,"by":11,"text":47},{"value":55,"source":43,"evidence":56},"asyncpg",[57],{"id":46,"by":11,"text":47},{"value":25,"source":43,"evidence":59},[60],{"id":46,"by":11,"text":47},"open_source","unknown",{"praise":64,"objections":88,"requests":89,"questions":98,"alternatives":103},[65,81],{"value":66,"source":67,"evidence":68},"Read-only by design is the right constraint for agent tooling","commenter",[69,73,77],{"id":70,"by":71,"text":72},"47577613","saltpath","Read-only by design is a smart constraint for agent tooling — eliminates a whole class of \"oops the LLM dropped my table\" failure modes. Curious about a couple things: how do you…",{"id":74,"by":75,"text":76},"47573527","petervandijck","This is really nicely, read only is the right way to start",{"id":78,"by":79,"text":80},"47565366","nadav_tal","Focusing on read-only tools as the default is the right architectural move for LLMs. I noticed you're using quote_ident() for escaping identifiers, are you planning to add…",{"value":82,"source":67,"evidence":83},"column_values tool addresses agents guessing enum and value casing",[84],{"id":85,"by":86,"text":87},"47590911","kiyeonjeon","The column_values tool solves a surprisingly annoying problem. Agents confidently writing WHERE status = 'active' when the real value is 'ACTIVE' or 'enabled' causes a lot of…",[],[90,94],{"value":91,"source":67,"evidence":92},"Schema whitelisting to hide internal or system tables from the agent",[93],{"id":78,"by":79,"text":80},{"value":95,"source":67,"evidence":96},"Cost guardrails against expensive full scans on large tables",[97],{"id":70,"by":71,"text":72},[99],{"value":100,"source":67,"evidence":101},"How schema introspection works and whether a config step is needed",[102],{"id":70,"by":71,"text":72},[],{"comments":38,"answered":105,"key":106},1,[107,108,111],{"id":46,"text":47},{"id":109,"text":110},"47578003","No config step, the tools discover everything from pg_catalog at call time. list_schemas → list_tables → describe_table is the typical agent workflow, and there's a query_guide…",{"id":112,"text":113},"47576853","Thanks! Read-only felt like the obvious constraint; agents shouldn't need write access to understand a database.",{"commenters":115,"max_depth":38,"maker_replies":38,"first_comment_mins":105,"lifespan_hours":116},6,50,[118,120,122,124,125,126,128,129,133],[46,33,33,119,11,105],"project\u002Fpositive\u002Fdesign",[70,105,38,121,71,33],"project\u002Fneutral\u002Fdesign",[109,105,33,123,11,105],"maker\u002Fneutral\u002Fdesign",[85,32,39,119,86,33],[74,38,39,119,75,33],[112,38,33,127,11,105],"commenter\u002Fneutral\u002Fnone",[78,34,38,121,79,33],[130,34,33,131,132,33],"47575840","other\u002Fneutral\u002Fnone","ForHackernews",[134,34,33,131,79,33],"47591402",[136,139],{"id":137,"t":138,"points":38,"comments":33},"47494195",1774295001,{"id":4,"t":12,"points":14,"comments":15},[141,146,150,154,159,164],{"id":142,"name":143,"points":144,"category":145},"47593422","1-Bit Bonsai",430,"ai",{"id":147,"name":148,"points":149,"category":145},"47536761","nullclaw",340,{"id":151,"name":152,"points":153,"category":20},"47557921","Git bayesect",337,{"id":155,"name":156,"points":157,"category":158},"47580350","30u30.fyi",256,"other",{"id":160,"name":161,"points":162,"category":163},"47571183","korb",205,"consumer_social",{"id":165,"name":166,"points":167,"category":168},"47589856","pg_textsearch",203,"data",false,"v2",{"id":172,"name":5,"line":6,"ai":169,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":30,"top":18,"kw":173,"maker":11,"domain":10,"tier":19,"attempts":32,"strip":174,"url":9,"mix":175,"praise":66,"objection":-1,"sub":21},47564620,[24,25,26,27,28],"030550300",[32,32,33,33],1793991149525]