Small Business Intelligence by Brick & Mortar
Free joined public records for small business and CRE: Twin Cities parcels, sales, licences
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"small-business-intelligence": {
"url": "https://sbi-mcp.small-business-intelligence-mcp.workers.dev/mcp"
}
}
}원격 엔드포인트
https://sbi-mcp.small-business-intelligence-mcp.workers.dev/mcpstreamable-httphttps://brickandmortar.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (12)
🟢data_source_atlas(question, place, already_tried)
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 this BEFORE researching a local market — it is the difference between reading whatever a search engine surfaced and pulling the administrative record that settles it. 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?"
입력 스키마
{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The real question, in plain words — e.g. 'is there room for another coffee shop in Bend' or 'what did the building at 412 Main last sell for'. Not a dataset name; the point of this tool is to work out which records answer a question you can only phrase in English."
},
"place": {
"type": "string",
"description": "The specific geography — 'Hennepin County, MN', 'Wichita, KS', 'the 78704 ZIP'. State matters more than people expect: it decides whether sale prices exist at all."
},
"already_tried": {
"description": "What you already looked at and what it failed to answer, if anything. Keeps the plan from re-recommending a dead end.",
"type": "string"
}
},
"required": [
"question",
"place"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢twin_cities_datasets(about)
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?"
입력 스키마
{
"type": "object",
"properties": {
"about": {
"description": "Optional plain-words filter — 'sales', 'who owns it', 'contamination'. Matches dataset titles and subjects. Omit to list everything.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"answer": {
"type": "string"
},
"dataset": {
"type": "string"
},
"scope_label": {
"type": "string"
},
"matching_rows": {
"description": "The true number of rows that match. `sample` shows at most six of them.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"columns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"key",
"label"
],
"additionalProperties": false
}
},
"sample": {
"description": "At most six example rows. Never report these as the complete result.",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"centre": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"coverage": {
"description": "The counties this dataset actually holds. Coverage is not uniform across datasets.",
"type": "array",
"items": {
"type": "string"
}
},
"download_url": {
"description": "Fetch this for the complete file.",
"type": "string"
},
"documented_at": {
"description": "Page documenting this dataset's source, full column list and stated limits.",
"type": "string"
},
"datasets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"rows": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"rows": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"key",
"label",
"rows"
],
"additionalProperties": false
}
},
"subject": {
"type": "string"
}
},
"required": [
"id",
"title",
"rows",
"columns",
"scopes"
],
"additionalProperties": false
}
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, no other field carries a result.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"answer",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢twin_cities_records(dataset, scope, address, within_ft, columns)
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?"
입력 스키마
{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "A dataset id from twin_cities_datasets — e.g. 'sales', 'owners', 'adjacency'."
},
"scope": {
"description": "A scope key from that dataset's `scopes`. Omit for the dataset's first cut.",
"type": "string"
},
"address": {
"description": "A street address inside the seven-county metro, to answer about ONE property instead of the whole market. Include the city after a comma when the street name is common — 'Grand Ave' exists in several of these cities.",
"type": "string"
},
"within_ft": {
"description": "Radius in feet around `address`. Default 5280 (one mile), capped at 26400.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"columns": {
"description": "Column keys to return. Omit for the dataset's default set.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"dataset"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"answer": {
"type": "string"
},
"dataset": {
"type": "string"
},
"scope_label": {
"type": "string"
},
"matching_rows": {
"description": "The true number of rows that match. `sample` shows at most six of them.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"columns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"key",
"label"
],
"additionalProperties": false
}
},
"sample": {
"description": "At most six example rows. Never report these as the complete result.",
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"centre": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"coverage": {
"description": "The counties this dataset actually holds. Coverage is not uniform across datasets.",
"type": "array",
"items": {
"type": "string"
}
},
"download_url": {
"description": "Fetch this for the complete file.",
"type": "string"
},
"documented_at": {
"description": "Page documenting this dataset's source, full column list and stated limits.",
"type": "string"
},
"datasets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"rows": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"rows": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"key",
"label",
"rows"
],
"additionalProperties": false
}
},
"subject": {
"type": "string"
}
},
"required": [
"id",
"title",
"rows",
"columns",
"scopes"
],
"additionalProperties": false
}
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, no other field carries a result.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"answer",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢business_teardown(business_name, city_metro, category)
Full structured teardown of ONE named small business: digital presence, review signal, competitive position, pricing posture, visibility gaps, and prioritized, evidence-cited recommendations. The flagship tool — start here for any single-business question. 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"
입력 스키마
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"description": "The business's name as it appears on its own signage/website, not a guess."
},
"city_metro": {
"type": "string",
"description": "City + state/region, e.g. 'Saint Paul, MN' — narrows the trade area and comp set."
},
"category": {
"description": "Category if known (e.g. 'nail salon', 'brewery taproom'). If omitted, step 2 of the procedure confirms it — don't guess from the name alone.",
"type": "string"
}
},
"required": [
"business_name",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢competitor_landscape(category, city_metro, radius_note)
Maps the local competitive set for a category + metro: true competitors vs. adjacent players, a positioning matrix, and saturation signals. 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?"
입력 스키마
{
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "The business category/vertical, e.g. 'nail salon', 'brewery taproom'."
},
"city_metro": {
"type": "string",
"description": "City + state/region defining the trade area, e.g. 'Denver, CO'."
},
"radius_note": {
"description": "Optional — a specific radius or neighborhood if the default trade-area logic in the procedure shouldn't apply.",
"type": "string"
}
},
"required": [
"category",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢review_intelligence(business_name, city_metro, category)
Mines public reviews for signal: a complaint taxonomy, theme extraction, sentiment trajectory over time, the differentiators customers actually cite, and red flags for a buyer. 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?"
입력 스키마
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"description": "The business's name as it appears on its own signage/website."
},
"city_metro": {
"type": "string",
"description": "City + state/region, e.g. 'Wichita, KS' — disambiguates same-named businesses."
},
"category": {
"description": "Category if known — helps set expectations for review volume/velocity norms.",
"type": "string"
}
},
"required": [
"business_name",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢local_visibility_audit(business_name, city_metro, category)
Audits a business's local search presence: map-pack factors, listing consistency, category selection, site fundamentals — what to check, and in what order — returned as a scored checklist. 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"
입력 스키마
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"description": "The business's name as it appears on its own signage/website."
},
"city_metro": {
"type": "string",
"description": "City + state/region, e.g. 'Aurora, CO'."
},
"category": {
"description": "Category if known — narrows which map-pack searches are the right ones to check.",
"type": "string"
}
},
"required": [
"business_name",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢pricing_benchmark(category, city_metro, services)
Builds 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. 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"
입력 스키마
{
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "The business category/vertical, e.g. 'massage spa', 'full-service restaurant'."
},
"city_metro": {
"type": "string",
"description": "City + state/region defining the comparison market, e.g. 'Wichita, KS'."
},
"services": {
"description": "Specific services/items to benchmark if known (e.g. ['30-min massage', 'gel manicure']) — otherwise the procedure derives a comparable bundle.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"category",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢broker_diligence_prep(business_name, city_metro, category, asking_price)
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"
입력 스키마
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"description": "The target business's name."
},
"city_metro": {
"type": "string",
"description": "City + state/region, e.g. 'Denver, CO'."
},
"category": {
"description": "Category if known — determines the relevant SDE-multiple range.",
"type": "string"
},
"asking_price": {
"description": "Listed asking price, if known — used to sanity-check against the multiple range, never to validate it.",
"type": "number"
}
},
"required": [
"business_name",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢market_opportunity_scan(category, city_metro)
Gap analysis for a category x metro: detects underserved demand, oversaturation, and genuine whitespace using only public signals — for someone deciding whether/where to open, expand, or invest. 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?"
입력 스키마
{
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "The business category/vertical to scan for whitespace, e.g. 'coffee shop', 'massage spa'."
},
"city_metro": {
"type": "string",
"description": "City + state/region defining the market, e.g. 'Aurora, CO'."
}
},
"required": [
"category",
"city_metro"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢compose_report(business_name, audience, completed_analyses)
Assembles the outputs of any prior Small Business Intelligence tool calls into one polished, client-ready report: section order, executive-summary rules, evidence-citation standards, and tone guidance matched to the audience. This is what makes a multi-tool session feel like a finished product, not a pile of separate answers. 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"
입력 스키마
{
"type": "object",
"properties": {
"business_name": {
"type": "string",
"description": "The business the report is about."
},
"audience": {
"type": "string",
"enum": [
"owner",
"broker",
"buyer",
"investor",
"general"
],
"description": "Who will read this report — drives section order, tone, and what gets emphasized vs. cut."
},
"completed_analyses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"tool": {
"type": "string",
"description": "Which of the other 7 tools produced this analysis, e.g. 'business_teardown'."
},
"summary": {
"type": "string",
"description": "The finished deliverable the calling model produced by following that tool's framework — not the raw framework payload itself."
}
},
"required": [
"tool",
"summary"
]
},
"description": "The completed write-ups from any prior tool calls this session, to be assembled — not re-researched."
}
},
"required": [
"business_name",
"audience",
"completed_analyses"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"subject": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"framework": {
"type": "string"
},
"research_procedure": {
"type": "array",
"items": {
"type": "object",
"properties": {
"step": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"instruction": {
"type": "string"
},
"guidance": {
"type": "string"
}
},
"required": [
"step",
"instruction"
],
"additionalProperties": false
}
},
"output_schema": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"quality_rubric": {
"type": "object",
"properties": {
"good_looks_like": {
"type": "array",
"items": {
"type": "string"
}
},
"common_failure_modes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"good_looks_like",
"common_failure_modes"
],
"additionalProperties": false
},
"caveats": {
"type": "array",
"items": {
"type": "string"
}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, every other field is an empty placeholder and must not be reported as a framework.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"framework",
"research_procedure",
"output_schema",
"quality_rubric",
"caveats"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴request_a_feature(request, kind, context, subject, reply_email)
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."
입력 스키마
{
"type": "object",
"properties": {
"request": {
"description": "The person's own words, VERBATIM — do not summarise, rewrite or tidy them. Omit only if they have not said it yet; you will be asked for it.",
"type": "string"
},
"kind": {
"description": "feature = make a tool do something it does not do. data = hold or expose a record we do not. correction = a tool here gave a wrong or misleading answer. Default: feature.",
"type": "string",
"enum": [
"feature",
"data",
"correction"
]
},
"context": {
"description": "Your summary of what they were actually trying to do when they hit this. This one is yours to write.",
"type": "string"
},
"subject": {
"description": "The city, sector, dataset or tool name this is about — 'Duluth', 'dental practices', 'twin_cities_records'.",
"type": "string"
},
"reply_email": {
"description": "Optional, and only if they offer it. VERBATIM — never guess, complete or correct an address. Omit it rather than approximate it.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}출력 스키마
{
"type": "object",
"properties": {
"tool": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"filed",
"needs_more",
"not_filed"
],
"description": "`needs_more` means nothing was sent and you should ask the person the question in `message`, then call again. `not_filed` means it failed — do NOT tell them it was submitted."
},
"message": {
"type": "string"
},
"filed": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"notice": {
"description": "Present ONLY when the request was denied by usage policy instead of executed. When present, nothing was filed.",
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "usage_limit_reached"
},
"message": {
"type": "string"
},
"upgrade_url": {
"type": "string"
}
},
"required": [
"status",
"message",
"upgrade_url"
],
"additionalProperties": false
}
},
"required": [
"tool",
"status",
"message"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}커뮤니티
증거