Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Free joined public records for small business and CRE: Twin Cities parcels, sales, licences
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://brickandmortar.dev/mcpพิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http small-business-intelligence https://brickandmortar.dev/mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"small-business-intelligence": {
"url": "https://brickandmortar.dev/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"small-business-intelligence": {
"type": "http",
"url": "https://brickandmortar.dev/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://brickandmortar.dev/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub 2016judea ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.2.0) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Georgia MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
An MCP server for Georgian public data, read from the organizations that publish it.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A free, open source MCP server that teaches any AI how to research a small business — and, more usefully, where the public records actually are.
Nine of its tools ship methodology, not data. Each returns a rigorously structured framework — a research procedure, an output schema, a quality rubric, the traps — and the calling model executes the research itself, with its own tools and its own keys. Those nine call nothing at all.
Six reach the platform. what_we_have_for_you is brickandmortar.dev's front door as a tool — say what you do, get your shelf. twin_cities_lookup, twin_cities_datasets and twin_cities_records answer from joined public records for the seven-county Minneapolis-St. Paul metro — parcels and lot lines, recorded sale prices, owners, rental licences, contamination files, business counts by trade, census tracts. Ask about one address and they answer about that address. They call brickandmortar.dev/api/export, which we run; no tool here calls any third party. Every answer is a true row count, at most six example rows, and a link to the complete file — never a file inline. See /privacy for exactly what those two transmit and what is kept.
That split is deliberate and dated: the server was built on "no remote calls to our servers" (2026-08-16), which rested on a thesis retired the next day — *the join is the moat, and the data ships*. Confirmed 2026-08-20; the nine are untouched.
Live endpoint: `https://brickandmortar.dev/mcp` No auth, no account, no key. Add it as a custom connector and ask.
A capable model already knows how to reason about a small business. What it does not know is the operational trivia that lives in nobody's training data:
Touches predicate returns zero touching parcels rather than an error, so adjacency quietly becomes "this parcel touches nothing";Every one of those produces a *plausible wrong answer* rather than a failure. That is the whole problem with public data, and it is what this server is for.
The frameworks are the reasoning. src/tools/sources.ts is the map — where each record lives, how to reach it, and the specific way it lies. Every access pattern and trap in it was measured live against the agency's own endpoint while building a real two-metro property and review corpus, not recalled from training data.
Start with data_source_atlas. It is the one that changes what the rest are worth.
| Tool | What it does |
|---|---|
| `data_source_atlas` | Given a real question and a place, returns a source-first research plan: which public record settles it, how to reach it, and what the public record cannot answer at all. Handles the jurisdictional fork (does this state even record sale prices?) before anything else. |
what_we_have_for_you | The front door as a tool. brickandmortar.dev is organised by who you are — 18 roles, each a shelf of datasets, bring-your-file tools, the one-address lookup and fixed-fee engagements. Returns the roles, or one role's shelf with each card tagged by which tool here answers it. Read live off the page's feed (/connect/roles.json); no price or count is typed here. |
twin_cities_lookup | One address in the seven-county metro → land use, build year, assessed value, last recorded sale, MPCA file, the parcels that touch it. Each field a value or a miss with its reason. |
business_teardown | Full structured teardown of one named business — presence, review signal, competitive position, pricing posture, visibility gaps, prioritized evidence-cited recommendations. |
competitor_landscape | Maps the local competitive set: true competitors vs. adjacent players, positioning matrix, saturation signals — corroborated against an administrative establishment count, not just map results. |
review_intelligence | Mines public reviews: complaint taxonomy, theme extraction, sentiment trajectory, red flags for buyers. Rates, never raw counts. |
local_visibility_audit | Local search presence audit: map-pack factors, listing consistency, category selection, site fundamentals — a scored checklist. |
pricing_benchmark | A defensible local pricing comparison, including how to normalize across bundles and what to do when nobody publishes prices. |
broker_diligence_prep | Pre-diligence for brokers and buyers: SDE framing, multiple ranges, red-flag checklist, seller questions — plus the county's own record on the real property. |
market_opportunity_scan | Gap analysis for a category × metro: underserved demand vs. a spot that is empty for a reason. |
compose_report | Assembles prior tool outputs into one client-ready report, matched to the audience. |
twin_cities_datasets | What joined public records we publish for the seven-county Minneapolis–St. Paul metro: row counts, columns, the cuts available, the counties each actually covers. |
twin_cities_records | Asks those records a question — one property or the whole market. Returns the true matching row count, six example rows, and a link to the complete file. |
bring_your_document | Their P&L, lease, comp set, address list or one claim, read against the Twin Cities record; a table citing the file behind every cell. Read, answered, dropped — nothing stored on either side. |
start_an_engagement | Sends. Files an enquiry for a fixed-fee engagement at the price and turnaround the live page states. A person replies; nothing is quoted or charged by the server. |
request_a_feature | Sends. Files a feature request, a data request or a correction to the person who builds this, when the server falls short of what the user wanted. |
Stated plainly, because the boundary is the design:
request_a_feature posts the request you dictated to us and nowhere else.Add the endpoint as a custom connector in Claude, or any MCP-compatible client:
https://brickandmortar.dev/mcp
Then ask something real:
"Where would I actually find what 1420 Grand Ave in Saint Paul last sold for?"
"I want to know if Wichita has room for another dog daycare — what should I pull?"
"Run a business_teardown on Mucci's Italian in Saint Paul, MN."
npm install
npm run typecheck # tsc --noEmit npm run dev # wrangler dev — serves http://localhost:8787
wrangler dev runs against Miniflare's local KV simulation, so the usage ledger works out of the box with no Cloudflare account needed.
# list every tool
npx @modelcontextprotocol/inspector --cli --server-url http://localhost:8787/mcp \ --method tools/list
npx @modelcontextprotocol/inspector --cli --server-url http://localhost:8787/mcp \ --method tools/call --tool-name data_source_atlas \ --tool-arg question="what did this building last sell for" \ --tool-arg place="Wichita, KS"
Or drop --cli for the interactive web UI (npm run inspector). Every tool should list with an outputSchema, and a tools/call against each should return structuredContent matching it, with no isError. All of them list with readOnlyHint: true except request_a_feature and start_an_engagement, which send a message and say so.
wrangler login # or set CLOUDFLARE_API_TOKEN
wrangler kv namespace create USAGE_LEDGER # once — copy the id into wrangler.jsonc npm run deploy
Ships to the free *.workers.dev subdomain — no DNS work, no paid plan.
tools/list is ~43 KB (~10.8K tokens) and sits in the client's context for the whole session whether or not a tool is ever called. Most of that is the shared outputSchema serialised once per tool. If you fork this and add tools, read the comment at the top of src/tools/types.ts first — every .describe() in that schema is paid for once per tool, forever.
src/
├── index.ts # Worker entry — routes /, /docs, /privacy, /mcp ├── server.ts # createServer(): builds McpServer; TOOL_NAMES is the one list ├── env.ts # Env (Worker bindings/vars) type ├── middleware/ # identity resolution, KV usage ledger, policy, withPolicy seam ├── oauth/ # OAuth 2.1 discovery handlers — written, not mounted ├── tools/ │ ├── sources.ts # WHERE THE RECORDS ARE — parcel GIS, Census, state/local, reviews │ ├── federal_sources.ts # BLS series construction + six measured traps │ └── *.ts # one file per tool, sharing FrameworkPayload from types.ts └── pages/ # landing (/), docs (/docs), privacy (/privacy)
Architecture and the SDK/transport decision: ARCHITECTURE.md.
The most valuable contribution is a measured trap. If you pull a public source and it lies to you in a way that returns a plausible number instead of an error, that belongs in sources.ts — with how you measured it and when. Access patterns rot as agencies reorganise; a correction with a date on it is worth more than a new framework.
Please don't add anything that makes the server call an external service. The no-outbound-calls property is what makes it free to run and safe to trust.
Built by Brick & Mortar — a small team in Saint Paul that maintains real local-market corpora (county parcel records, recorded sales, review panels, federal series) for its own products. The frameworks here are what we learned building those, including the traps that silently return a plausible wrong number.
This is a gift, not a funnel. It is not a demo of a paid product, there is nothing gated, and nothing here reports back to us.
MIT — see LICENSE.