Skip to main content
Glama
9mp96ygnbk-alt

FactLot MCP Server

FactLot

The open fact layer for commercial real estate AI agents.

Install in one line (v0.1.0; no API key, no network calls; listed in the official MCP Registry as io.github.9mp96ygnbk-alt/factlot):

# Any MCP client (stdio). For Claude Code: claude mcp add factlot -- npx -y <this URL>
npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.1.0/factlot-mcp-standalone-0.1.0.tgz

Claude Desktop: open factlot-0.1.0.mcpb. REST, OpenAPI and remote MCP: docker run -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.1.0. Python: pip install "git+https://github.com/9mp96ygnbk-alt/factlot.git@v0.1.0#subdirectory=python".

Hosted registry early access: teams that want cited parcel-to-owner-to-entity lookups without self-hosting can email contact@factlot.com. The hosted service is not yet public, and early-access teams help set pricing. 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.

Related MCP server: civic-library-mcp

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 loads through the collector. 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.0 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://<host>/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.0/factlot-mcp-standalone-0.1.0.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.0

Claude Desktop users can install factlot-0.1.0.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).

Release files, the GHCR image, and git+https installs need the repository to be public and a release (here v0.1.0) to exist; from a clone works now.

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

"FactLot" and the FactLot logo are trademarks of their owner. The open-source licenses cover the code, not the name.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Open-source MCP server providing real estate regulatory intelligence (zoning, permits, entitlements, deal scoring) for US properties, enabling AI agents to access 10 callable tools.
    12
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to look up county assessor public records for properties, check MLS discrepancies against public data, and discover new county assessor sources, all via a local MCP server for real-estate appraisal workflows.
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server giving agents canonical access to 180M+ US parcels with ownership, valuation, permits, deeds, hazard, and market data.
    8
    49 npm
    Apache 2.0