Small Business Intelligence by Brick & Mortar

io.github.2016judea由 GitHub 账号 2016judea 发布v0.2.0更新于 Oct 24, 2026

Free joined public records for small business and CRE: Twin Cities parcels, sales, licences

发布方自己的服务:brick.blue

已验证Streamable HTTP可网页运行知识与记忆数据与分析商业与电商

概览

AI 生成的概览

远程 MCP 服务器,为助手提供小企业与商业地产研究的公开记录方法框架,以及明尼阿波利斯-圣保罗双城地区的公开记录查询。

可以做什么
  • 规划公开记录研究:给出以来源为先的研究计划,指明哪类县、人口普查、BLS 或州级记录能回答该问题,以及各自的陷阱
  • 查询单个双城地址:土地用途、建成年份、评估价值、最近成交、污染或储罐档案、相邻地块
  • 列出并查询已发布的双城数据集:真实行数、列名、可用筛选口径、覆盖县份
  • 获取方法论框架:企业拆解、竞争格局、评论挖掘、本地可见度审计、定价对标、经纪尽调、市场空白扫描、报告汇编
  • 将用户提供的文档与双城记录比对,每个单元格附来源引用
  • 向维护者提交固定费用委托咨询,或提交功能与数据请求
适用场景
适合助手研究某家小企业、某处商业地产或某个本地市场,需要知道权威公开记录在哪里、又容易怎样误导时使用。数据类工具仅覆盖明尼阿波利斯-圣保罗七县都会区;方法框架适用范围更广,但研究由模型自行完成。
运行要求
远程 streamable HTTP 端点;未声明需要账号、密钥或环境变量。框架类工具不发起任何调用,依赖调用模型自身的工具与密钥。双城工具会调用提供方自己的导出接口,因此需要能访问该主机的网络。
安装前请注意
有两个工具会发送数据:委托咨询与功能请求会把用户口述的内容提交给提供方。双城查询与记录工具会把问题和地址发送到提供方的接口,README 指向隐私页面说明传输与保留内容。文档比对据称读取、作答后即丢弃。该服务器不做财务尽调,也不持有私有的营收、利润率或租约数据。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Small Business Intelligence by Brick & Mortar,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.2016judea%2Fsmall-business-intelligence/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "small-business-intelligence-by-brick-mor": {
      "type": "http",
      "url": "https://brickandmortar.dev/mcp"
    }
  }
}

README

Small Business Intelligence

[Small Business Intelligence by Brick & Mortar MCP server]

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.

Why this exists

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:

  • that a county's parcel geometry arrives in survey feet in Kansas and metres in Minnesota, so a hard-coded threshold silently triples;
  • that Esri's Touches predicate returns zero touching parcels rather than an error, so adjacency quietly becomes "this parcel touches nothing";
  • that Kansas never records a sale price at all, so an hour spent looking for one is an hour spent looking for something that does not exist;
  • that Google's Places API returns at most five reviews, relevance-ranked, so a sentiment trend computed from them is a real-looking number from a sample somebody else chose;
  • that County Business Patterns suppresses small cells, so reading one as zero turns a thin market into an empty one.

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.

The tools

Start with data_source_atlas. It is the one that changes what the rest are worth.

ToolWhat it does
data_source_atlasGiven 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_youThe 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_lookupOne 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_teardownFull structured teardown of one named business — presence, review signal, competitive position, pricing posture, visibility gaps, prioritized evidence-cited recommendations.
competitor_landscapeMaps the local competitive set: true competitors vs. adjacent players, positioning matrix, saturation signals — corroborated against an administrative establishment count, not just map results.
review_intelligenceMines public reviews: complaint taxonomy, theme extraction, sentiment trajectory, red flags for buyers. Rates, never raw counts.
local_visibility_auditLocal search presence audit: map-pack factors, listing consistency, category selection, site fundamentals — a scored checklist.
pricing_benchmarkA defensible local pricing comparison, including how to normalize across bundles and what to do when nobody publishes prices.
broker_diligence_prepPre-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_scanGap analysis for a category × metro: underserved demand vs. a spot that is empty for a reason.
compose_reportAssembles prior tool outputs into one client-ready report, matched to the audience.
twin_cities_datasetsWhat 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_recordsAsks 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_documentTheir 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_engagementSends. 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_featureSends. 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.

What it will not do

Stated plainly, because the boundary is the design:

  • No remote calls to us, from the nine framework tools. Every endpoint they name is reached by your model, directly, with your own keys. The two Twin Cities tools do call us — that is how they hand over the records — and request_a_feature posts the request you dictated to us and nowhere else.
  • No data. There is no corpus here, nothing cached, nothing to go stale.
  • No account, no telemetry about you. The only thing recorded is an aggregate per-tool call counter with no identity attached. See PRIVACY.md.
  • No claim to do financial diligence. Revenue, margin, private lease terms and the terms of a private sale are not public anywhere in the United States. The tools say so rather than substituting a proxy.

Connect it

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."

Run your own

bash
npm installnpm run typecheck    # tsc --noEmitnpm 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.

Verify it

bash
# list every toolnpx @modelcontextprotocol/inspector --cli --server-url http://localhost:8787/mcp \  --method tools/list
# call onenpx @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.

Deploy

bash
wrangler login                              # or set CLOUDFLARE_API_TOKENwrangler kv namespace create USAGE_LEDGER   # once — copy the id into wrangler.jsoncnpm run deploy

Ships to the free *.workers.dev subdomain — no DNS work, no paid plan.

A note on context cost

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.

Repo structure

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.

Contributing

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.

Who made this

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.

License

MIT — see LICENSE.

来源:README.md,提交 94646a2

工具

16

data_source_atlas

Data Source Atlas

Given a real question about a local market or a specific property, returns a source-first RESEARCH PLAN: which public record actually settles the question, how to reach it directly (county parcel GIS, Census CBP/ACS/permits, BLS series, state registries, licences, inspections), what the answer will be worth, and what the public record cannot answer at all. Use it before researching a local market, to find the administrative record that settles the question. Example invocations: - "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?" - "How do I find out who really owns this building and what else they own?" - "What public data would tell me if this neighborhood is actually growing?"

输入参数place必填question必填already_tried

what_we_have_for_you

What We Have For You

The front door of brickandmortar.dev, as a tool. The platform is organised by WHO YOU ARE — an SBA lender, a business buyer, a landlord, a contractor, a journalist, a site selector, an appraiser, a city planner, 18 roles — and each role has a shelf of cards: joined public-records datasets for the Minneapolis–St. Paul metro, tools that read a file you bring against those records, a one-address lookup, and fixed-fee engagements where a person reads the record for you. Call with no arguments to see the roles; call with `role` to get that shelf, each card tagged with which tool on this server answers it. Call this FIRST when someone says what they do, or asks what we can do for them. Ask what they do if they have not said — the shelf depends on it. Everything free here is free with no account. Example invocations: - "I'm an SBA lender in Minneapolis — what do you have?" - "What can this do for a landlord?" - "Show me the shelf for a business buyer."

输入参数whorole

twin_cities_lookup

Twin Cities Lookup

One address in the Minneapolis–St. Paul metro → what the public record says about that parcel, in one call: land use, build year, assessed value, last recorded sale, any MPCA contamination or storage-tank file, and the parcels that touch it with how many owners they have. Each field is a value or a miss WITH ITS REASON — 'the county records no build year' — never a blank. Free, no account, nothing stored. Use it the moment an address comes up; then twin_cities_records for the surrounding market. Example invocations: - "What do you know about 1420 Grand Ave, Saint Paul?" - "Is there anything on file for the building at 2900 Lyndale Ave S?"

输入参数address必填

twin_cities_datasets

Twin Cities Datasets

Lists the public-records datasets Brick & Mortar publishes for the seven-county Minneapolis-St. Paul metro, with real row counts, column names, the filtered cuts available, and the counties each one actually covers. Free, no account. Call this FIRST to learn what can be answered, then call twin_cities_records to ask it. These are joined county and federal records — parcels and lot lines, recorded sale prices, owners, rental licences, contamination files, business counts by trade, census tracts. Example invocations: - "What Twin Cities property data do you have access to?" - "Is there anything on contamination or storage tanks in Minneapolis?" - "What columns are in the recorded-sales dataset?"

输入参数about

twin_cities_records

Twin Cities Records

Answers a question about the Minneapolis-St. Paul metro from joined public records — what a property sold for and when, who owns it and what else they hold, what shares its lot line, whether it has a contamination or storage-tank file, who is licensed to trade there, how the neighbourhood's census tract compares. Give an `address` to answer about one property and its surroundings; omit it to ask about the whole market cut. Returns the true matching row count, up to six example rows, and a link to the complete file. Example invocations: - "What did 1420 Grand Ave, Saint Paul last sell for?" - "What commercial property sold within half a mile of 2900 Hennepin Ave, Minneapolis?" - "Does 500 Washington Ave S have a contamination file, and who owns it?"

输入参数scopeaddresscolumnsdataset必填within_ft

bring_your_document

Bring Your Document

Reads a document the person has — a P&L, a lease, a comp set, a schedule of locations, a member list, a story's addresses, a single claim — against the Minneapolis–St. Paul public record, and returns a table that cites the file behind every cell. This is the half of the platform the public record cannot do alone: their private file, our joined records, one answer. Free, no account. The document is read in the request, answered, and dropped — nothing is stored on either side. Get the slug and what to bring from what_we_have_for_you (cards with api_tool=true list `bring`). Pass the text exactly as they gave it; do not summarise a P&L before sending it. Tell them in one line what was sent and that it was not kept. Example invocations: - "Here's the P&L the seller sent — what does this business actually earn?" → tool 'pl' - "Grade my comps against the county's own sales" → tool 'compgrade' - "Check this line in my story: 'the building sold for $4.2M in March'" → tool 'claim-check', `claim`

输入参数texttool必填claimcontext

business_teardown

Business Teardown

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a structured teardown of ONE named small business — digital presence, review signal, competitive position, pricing posture, visibility gaps, and prioritized, evidence-cited recommendations. Start here for any single-business question.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Run a teardown of Mucci's Italian in Saint Paul, MN" - "Tear down The Gray Duck Tavern (bar) in Minneapolis and tell me what's actually broken" - "I'm thinking about buying Sunrise Nails in Denver, CO — give me a teardown before I look deeper"

输入参数categorycity_metro必填business_name必填

competitor_landscape

Competitor Landscape

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for mapping the local competitive set for a category + metro — true competitors vs. adjacent players, a positioning matrix, and saturation signals.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Map the competitive landscape for coffee shops in Saint Paul, MN" - "How saturated is the nail salon market in Aurora, CO?" - "Who are the real competitors to a new brewery taproom opening in the North Loop, Minneapolis?"

输入参数category必填city_metro必填radius_note

review_intelligence

Review Intelligence

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for mining public reviews for signal — a complaint taxonomy, theme extraction, sentiment trajectory over time, the differentiators customers actually cite, and red flags for a buyer. It does not read any review itself.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Mine the reviews for Al's Breakfast in Minneapolis for real patterns, not just a star rating" - "Perfect Image Salon in Wichita has a 4.6 average — check whether that's stable or masking a bad last 90 days" - "I'm evaluating The Anchor Room (bar) in Saint Paul, MN as a buyer — what do the reviews show about staffing turnover or an ownership change that the rating alone doesn't?"

输入参数categorycity_metro必填business_name必填

local_visibility_audit

Local Visibility Audit

Returns a research framework, not the finished audit: a scored checklist of what to check in a business's local search presence — map-pack factors, listing consistency, category selection, site fundamentals — and in what order. This tool reads no listing; the calling model runs the checks with its own web search. Example invocations: - "Run a local visibility audit on Fern & Fig Nail Bar in Cedar Rapids, IA" - "Why doesn't Steel Toe Brewing show up when someone searches 'brewery near me' in Louisville?" - "Give me a scored GBP/NAP checklist for a hair salon in Aurora, CO before I redo their listing"

输入参数categorycity_metro必填business_name必填

pricing_benchmark

Pricing Benchmark

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a defensible local pricing comparison within a category — how to normalize across differing service bundles, and what to do when competitors don't publish prices at all. It holds no prices itself.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Benchmark gel manicure pricing across nail salons in Denver, CO" - "Is this brewery's pint pricing in line with the Twin Cities taproom market?" - "Build a pricing comparison for full-service restaurants in Wichita, KS when most don't list prices online"

输入参数category必填servicescity_metro必填

broker_diligence_prep

Broker Diligence Prep

Pre-diligence framework for a business broker or buyer evaluating a target: SDE framing (why the discretionary-earnings figure, not net income or raw EBITDA, is the relevant number, and what typically gets added back), a category multiple range the model must research fresh and date-stamp (never a hardcoded table), a public-signal red-flag checklist run before any financials are shared, and a prioritized seller-question list built from the specific gaps the research actually surfaces. Example invocations: - "Prep me for diligence on a brewery taproom listed in Minneapolis, MN" - "What questions should I ask the seller of a hair salon in Wichita, KS before I make an offer?" - "This restaurant is asking $650K — what red flags should I check before taking that seriously?" - "I'm looking at a nail salon in Tampa, FL asking $310K — sanity-check that against category multiples before I meet the seller"

输入参数categorycity_metro必填asking_pricebusiness_name必填

market_opportunity_scan

Market Opportunity Scan

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for a gap analysis of a category x metro — how to tell underserved demand, oversaturation and genuine whitespace apart using only public signals, for someone deciding whether/where to open, expand, or invest.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "Is there whitespace for a new brewery taproom in the North Loop, Minneapolis?" - "Scan the nail salon market in Aurora, CO for underserved demand" - "Where in Wichita, KS is full-service restaurant demand outrunning supply?"

输入参数category必填city_metro必填

compose_report

Compose Report

Returns a research framework, not the finished analysis: the procedure, output schema and quality rubric for assembling results already in the conversation into one client-ready report — section order, executive-summary rules, evidence-citation standards, and tone guidance matched to the audience. The calling model writes the report; this tool returns only the structure.. This tool fetches no data; the calling model runs the procedure with its own web search and produces the result. Example invocations: - "I've run a teardown and a review-intelligence pass on this restaurant — compose it into a report for the owner" - "Assemble everything we've found on this brewery into a broker-facing diligence report" - "Turn the teardown and competitor landscape into a report I can hand an investor"

输入参数audience必填business_name必填completed_analyses必填

start_an_engagement

Start an Engagement

Asks a person at Brick & Mortar to read the public record for them, for a fixed fee: a site screen for a lender or environmental consultant, a diligence packet on a deal, a register check across a landlord's portfolio, a weekly work route for a contractor. Call with no arguments to see the engagements, their prices and turnaround — those come from the live page, never from memory. Call with `engagement`, `who`, `email` and `detail` to file the enquiry; a person replies by email. Nothing is quoted, charged or scheduled here. Offer this only after the free tools have been tried or when the person asks for someone to do the work. Before filing, confirm with them what will be sent. Pass their EMAIL and DETAIL exactly as written. Never say it was sent unless `status` is `filed`. Example invocations: - "Can someone there just run this site for me? I'm an SBA lender." - "I want the diligence packet on this deal — here's my email."

输入参数whoemaildetailengagement

request_a_feature

Request a Feature

Sends a feature request, a data request or a correction straight to the person who builds this server — free, no account, and it reaches a real inbox. Use it whenever this server falls short of what the user actually wanted: a question it cannot answer, a dataset or column it does not hold, a city or sector it does not cover, or an answer from one of these tools that looks wrong. Reaching a wall is not the end of the turn; offer to file it. Before calling, ask for what you do not have — what they were trying to do, which city/sector/dataset it concerns, and whether they want a reply at an email address. Do not demand any of it: file what you have. Pass their REQUEST and their EMAIL exactly as they wrote them, never a paraphrase or a corrected address; write `context` yourself. Tell them what you filed in one line afterwards so they can correct you, and never say it was sent unless `status` came back `filed`. Example invocations: - "I wish this could tell me the lease rate — can you ask them to add it?" - "Do they cover Duluth? No? Tell them I want it." - "That sale price looks like the wrong year — report it to whoever runs this."

输入参数kindcontextrequestsubjectreply_email

版本历史

1
  1. v0.2.0最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Brick 集成