About FactLot
FactLot provides commercial real estate agents with cited public-record facts, canonical property IDs, and deterministic calculators. Its MCP server and SDKs expose auditable calculations and property data tools for AI workflows.
Key features
- 01Deterministic CRE calculators with audit trails
- 02Canonical IDs for properties and entities
- 03Facts with source and usage rights
- 04Registry lookups for supported regions
- 05Tools for multiple AI platforms
Use cases
- 01Calculate debt sizing, rent, CAM, or IRR
- 02Resolve a property or entity to a canonical ID
- 03Use cited public-record facts in CRE workflows
- 04Check lease values against source documents
MCP support
FactLot offers hosted Streamable HTTP and locally runnable MCP servers. They expose calculators, ID tools, fact validation, search and fetch, and optional registry lookups to MCP clients.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://api.factlot.com/mcpclaude mcp add --transport http 9mp96ygnbk-alt-factlot https://api.factlot.com/mcp{"mcpServers":{"9mp96ygnbk-alt-factlot":{"type":"http","url":"https://api.factlot.com/mcp"}}}Open in Cursor{"servers":{"9mp96ygnbk-alt-factlot":{"type":"http","url":"https://api.factlot.com/mcp"}}}Open in VS Code{"mcpServers":{"9mp96ygnbk-alt-factlot":{"type":"http","url":"https://api.factlot.com/mcp"}}}{"mcpServers":{"9mp96ygnbk-alt-factlot":{"serverUrl":"https://api.factlot.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEFactLot
The open fact layer for commercial real estate AI agents. Deterministic CRE math with an audit trail, canonical property IDs, and public-record facts that cite the document they came from. Free to use hosted, free to run yourself, open source.
Try it in ten seconds
No key, no install:
curl -s https://api.factlot.com/v1/calc/debt_sizing -H 'content-type: application/json' \
-d '{"noi":1000000,"value":15000000,"rate_annual":0.065,"amortization_years":30,"max_ltv":0.65,"min_dscr":1.25}'
The answer is a $9,750,000 maximum loan, bound by loan-to-value (the coverage test alone would
allow $10.5 million), with every intermediate step, its formula, and the versioned formula ID
calc.debt_sizing@2 so an agent can cite exactly how the number was made.
Connect your agent
| Client | How |
|---|---|
| Claude Code plugin | /plugin marketplace add 9mp96ygnbk-alt/factlot, then /plugin install factlot@factlot: eight CRE skills (loan sizing, lease economics, CAM, ASC 842, returns and more) wired to the hosted tools (plugin) |
| Claude Code | claude mcp add --transport http factlot https://api.factlot.com/mcp |
| Claude (web and Desktop) | Settings, Connectors, Add custom connector: https://api.factlot.com/mcp. Or open factlot-0.1.1.mcpb |
| ChatGPT | Developer mode app with https://api.factlot.com/mcp, or a Custom GPT Action importing https://api.factlot.com/openapi-3.0.json |
| Cursor, VS Code, other clients | Remote MCP URL https://api.factlot.com/mcp (guides) |
| Any MCP client, run locally | npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.1.1/factlot-mcp-standalone-0.1.1.tgz (Node.js 22.6+, no network calls) |
| Python agents | pip install "git+https://github.com/9mp96ygnbk-alt/[email protected]#subdirectory=python" |
| Self-hosted REST and MCP | docker run -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.1.1 |
The hosted endpoint is free with no key at 60 requests a minute. It is listed in the
official MCP Registry
as io.github.9mp96ygnbk-alt/factlot. Runnable examples for REST, Python and agent SDKs are in
examples/.
Try the registry tools on real data: the DC registry sample (19.7 MB, CC BY 4.0) holds 18,077 District of Columbia commercial parcels, 5,513 owning entities and 7,908 cited ownership links.
curl -fLO https://github.com/9mp96ygnbk-alt/factlot/releases/download/registry-sample-dc-2026-11-03/factlot-registry-sample-dc-2026-11-03.db.gz && gunzip factlot-registry-sample-dc-2026-11-03.db.gz
FACTLOT_REGISTRY_DB="$PWD/factlot-registry-sample-dc-2026-11-03.db" npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.1.1/factlot-mcp-standalone-0.1.1.tgz
Paid plans: Pro $49 a month and Team $599 a month raise the hosted limits and include hosted registry lookups as each region opens. Enterprise and private deployments: [email protected]. Questions and bug reports go in GitHub Discussions and Issues.
Agents doing CRE work get stuck in the same places. They can't trust their own arithmetic, they can't cite where a number came from, and they can't tell that "Suite 400, 123 Main LLC" in one system is the same thing as a parcel number in another.
FactLot gives every agent three things it can use by default:
| Package | What it does | License |
|---|---|---|
@factlot/calc | Deterministic CRE calculators: rent schedules, net effective rent, proposal comparison, percentage rent, CAM reconciliation, loan sizing, ASC 842 lease remeasurement, prepayment and defeasance, WALT, IRR/NPV, lease vs. own, renew vs. relocate, hotel metrics. Every result includes an audit trail and a versioned formula ID. | Apache-2.0 |
@factlot/id | FactLot ID gives canonical IDs for parcels, legal entities, buildings, spaces, leases, and documents. IDs are deterministic wherever the world already has a key, so any agent can compute them offline. | Apache-2.0 |
@factlot/schema | The FactLot data model. A fact is one atomic claim with provenance (source document, page, clause, method) and rights (whether an AI may use or redistribute it). | MIT |
@factlot/tools | The tool catalog, with native tool definitions for Claude, OpenAI, Gemini, Amazon Bedrock, Mistral, and OpenAPI platforms, plus one runTool dispatcher. | MIT |
@factlot/server | The remote connector: Streamable HTTP MCP at /mcp, REST at /v1, and OpenAPI. Runs in Docker. | Apache-2.0 |
@factlot/mcp | An MCP server that exposes all of the above to Claude and any other MCP-capable agent. It runs locally and needs no API key. | Apache-2.0 |
Why
In a simulated survey of 165 CRE agent personas across 20 roles:
- The highest-rated offerings were document-to-facts (3.52/5), deterministic calculators (3.24), and canonical IDs and entity resolution (3.12).
- 95% asked for citations, 51% reported that LLM math was wrong, and 35% said data licensing stops them using data they already pay for.
- Agent-to-agent negotiation scored 0.35/5. Agents want facts they can trust, not more autonomy.
That survey is a hypothesis generator, not market research. The customer discovery plan describes how we validate it. The same personas later reviewed v0.1 as built (also simulated): the calculators, IDs, and the quote-on-page verifier were praised wherever they applied, and most personas were blocked by coverage, which is what the section below is honest about.
What FactLot covers today
Be clear about scope before adopting it:
- Calculators, IDs, and the fact model work anywhere. They need no data and no API key, and they run offline in both SDKs with identical results.
- The registry covers the largest metros, unevenly. Real public-record rolls are loaded for Harris, Dallas, Tarrant, Travis and Collin (Texas), New York City, Los Angeles, Boston, San Francisco, Denver, Charlotte, Minneapolis and the District of Columbia: 708,538 commercial, industrial and multifamily parcels, with 12.9 million registered entities from Texas, New York, Colorado, Pennsylvania and DC for owner resolution. A second tier of 28 more counties is verified with adapters (Monroe, Suffolk, Nassau, Westchester and Erie NY; three Maryland counties; four Massachusetts counties; Denton, Williamson and Fort Bend; Milwaukee, Marion, Oakland, Wake, Davidson, DeKalb, Sacramento, Salt Lake, Utah County, Pierce, Multnomah, and two Pennsylvania counties) and is loaded in full. Five of its sources then covered whole states, and those are loaded too (New York outside the city, Maryland, Wisconsin, Massachusetts outside Boston, and 25 of Utah's 29 counties): 1,008,126 more commercial parcels in 207 counties, 436,190 with an organisation owner of record. The Maryland and Utah files carry no owner names, and owner linking reaches only the Connecticut entities loaded so far. Cook County, Florida, Fulton, Maricopa, Wayne, Fairfax, King and much of California wait on a licence decision, a form or a purchase. Commercial, industrial and multifamily parcels only; several public files omit owner names; no sales prices, tenants, debt, zoning, or building specs beyond area and year built. See the registry, the Tier 1 catalog and the Tier 2 index.
- One rules pack, the Texas property-tax protest deadline, verified against the official statute text. Other jurisdictions follow only after a person verifies them.
- Lease ingestion is a prototype: deterministic quote-on-page and value-in-quote checks, OCR for scanned pages through a pluggable backend, but no published accuracy number yet.
- Not yet on npm or PyPI, and no hosted public endpoint. Install from the v0.1.1 release, from git, from source, or with Docker (getting started).
Connect FactLot to any AI platform
| Platform | How to connect |
|---|---|
| Claude | Add a custom connector with https://api.factlot.com/mcp, install the one-click Desktop extension (factlot.mcpb), use Claude Code, or call it from the Claude API |
| ChatGPT and OpenAI | Create a ChatGPT app in developer mode (search/fetch make deep research work), import /openapi.json as a Custom GPT Action, use the Responses API's remote MCP, or use function calling |
| Google Gemini | Use Gemini API function declarations, Gemini CLI over MCP, or Vertex AI |
| Microsoft Copilot | Add an MCP tool in Copilot Studio, use the Power Platform connector, or build a Microsoft 365 API plugin |
| Amazon Bedrock | Use the Converse API toolConfig, or a Bedrock Agents action group backed by the Lambda handler |
| Mistral, xAI, Llama, DeepSeek, and others | Use OpenAI-compatible function calling or MCP clients |
Every surface serves the same tools, generated from one catalog. See connectors/.
Quick start: use FactLot from an agent
FactLot is not on npm or PyPI yet. These work without either: they run the stdio MCP server from a GitHub release, from a clone, or in Docker. Each was run end to end (install verification).
# From the GitHub release: one file, dependencies bundled
claude mcp add factlot -- npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.1.1/factlot-mcp-standalone-0.1.1.tgz
# From a clone
git clone https://github.com/9mp96ygnbk-alt/factlot.git && cd factlot
npm install && npm run build
claude mcp add factlot -- node "$PWD/packages/mcp/dist/bin.js"
# Remote connector (Streamable HTTP MCP at /mcp, REST at /v1, OpenAPI)
docker run --rm -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.1.1
Claude Desktop users can install factlot-0.1.1.mcpb from the
release. For any other MCP client, use the
same command in its config:
{
"mcpServers": {
"factlot": {
"command": "node",
"args": ["/absolute/path/to/factlot/packages/mcp/dist/bin.js"]
}
}
}
After first publish to npm: claude mcp add factlot -- npx -y @factlot/mcp.
Getting started has every option, including the TypeScript libraries
as release tarballs.
The server provides these tools: calc_rent_schedule, calc_net_effective_rent,
calc_compare_proposals, calc_percentage_rent, calc_cam_reconciliation,
calc_debt_sizing, calc_lease_remeasurement_asc842, calc_prepayment_and_defeasance,
calc_walt, calc_npv, calc_irr, calc_lease_vs_own,
calc_renew_vs_relocate, calc_hotel_metrics,
rules_tx_property_tax_protest_deadline,
id_parcel, id_entity, id_space, id_document, id_parse, fact_validate,
search, fetch, and schema_get, plus the six registry_* lookups when a registry database is configured
(FACTLOT_REGISTRY_DB).
Quick start: Python agents
pip install "git+https://github.com/9mp96ygnbk-alt/factlot.git#subdirectory=python"
# after first publish to PyPI: pip install factlot
import factlot
tools = factlot.anthropic_tools() # or factlot.openai_tools(); pass these to your model
# When the model calls a tool, run it by name with the model's arguments:
result = factlot.run_tool("calc_npv", {"cash_flows": [-1000, 600, 600], "rate": 0.08})
result["value"]["npv"] # 69.96
The Python SDK has no dependencies and passes the same conformance vectors as the TypeScript packages. A differential test runs random inputs through both SDKs in CI and fails on any difference, down to the last digit. See python/README.md.
Quick start: use the libraries
import { debtSizing } from "@factlot/calc";
import { parcelId } from "@factlot/id";
const loan = debtSizing({
noi: 1_000_000,
value: 15_000_000,
rate_annual: 0.06,
amortization_years: 30,
max_ltv: 0.65,
min_dscr: 1.25,
min_debt_yield: 0.09,
});
loan.value.max_loan; // 9750000
loan.value.binding_constraint; // "ltv"
loan.steps; // every intermediate value, with formulas
loan.formula; // { id: "calc.debt_sizing", version: 2 }
parcelId({ stateFips: "06", countyFips: "037", apn: "5432-001-012" });
// { kind: "parcel", urn: "fl:parcel:us-06037:5432001012", short: "flp_..." }
Develop
This requires Node.js 22.6 or newer.
npm install
npm run check # lint, format check, typecheck, tests, build
How FactLot is built and funded
FactLot follows the Supabase model:
-
Open source. The platform code is Apache-2.0. Client-facing schemas and SDKs are MIT. Everything here can be self-hosted, which matters when leases are confidential.
-
FactLot Cloud (planned). These are hosted services that cost real money to run:
- the FactLot Registry: ID resolution, ownership graph, crosswalks, change webhooks
- Ingest: documents to cited facts
- Rules packs: property tax, zoning, building-performance law
Pricing is usage-based with a free tier.
See docs/business-model.md and docs/roadmap.md.
Docs
- Agent guide: which tool to call when · llms.txt
- Rules packs · Lease ingestion · Registry
- FactLot ID specification
- Fact model: provenance and rights
- Backlog: everything not finished yet
- Roadmap
- Business model
- Customer discovery plan
- Contributing · Security
"FactLot" and the FactLot logo are trademarks of their owner. The open-source licenses cover the code, not the name.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.