FactLot

io.github.9mp96ygnbk-alt由 GitHub 账号 9mp96ygnbk-alt 发布v0.5.0更新于 Nov 7, 2026

Cited CRE facts and deterministic calculators for agents: rent, CAM, debt sizing, IRR, parcel IDs.

已验证Streamable HTTP可网页运行金融知识与记忆数据与分析

概览

AI 生成的概览

FactLot 为助手提供可复现、可引用的商业地产计算器、规范化物业 ID,以及带原文引文核验的文档事实。

可以做什么
  • 计算租赁与租金:租金计划、净有效租金、方案比较、百分比租金、WALT、NPV/IRR
  • 核算运营成本与资本支出:CAM 对账(单户与批量)、资本支出回收、费用分摊
  • 测算债务与投资:贷款额度、摊销、提前还款与 defeasance、DCF 预测、直接资本化、租与买、续租与搬迁、LP/GP 瀑布分配、ASC 842 重新计量
  • 分析物业表现:多户住宅租金表、酒店入住率/ADR/RevPAR 指标、1031 与德州房产税申诉期限及不均等估值算术
  • 核验文档提取:按页码引文校验数值与论断、生成租约摘要、比对 estoppel 或租金表、分摊 T-12 报表
  • 生成并校验地块、实体、楼宇、单元和文档的规范 ID,并按公开 schema 校验事实
适用场景
适合助手进行商业地产测算、租约分析、CAM 或房产税工作,且数字需要可复现、可引用而非在上下文中自行计算时。也适合需要把从租约或运营报表中提取的数值与原文核对的工作流。
运行要求
可使用托管远程端点(无需密钥,有速率限制),或在本地运行:独立包需要 Node.js 22.6 或更高版本,自托管也可用 Docker。registry 查询工具需要自托管副本并通过 FACTLOT_REGISTRY_DB 配置 registry 数据库。计算器与 ID 工具无需 API 密钥或账号。
安装前请注意
托管服务不保存请求体,但没有 SOC 2 报告;README 建议对机密租约自托管,使文档不离开本地网络。文档工具需要把页面文本发送到服务器。registry 覆盖不均,托管 registry 查询尚未开放。另有付费套餐提供更高额度。结果仅为算术,不构成税务、法律或估值意见,与其他系统(如 ARGUS)的一致性未经测试。

安装

在 SourceWeft 中

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

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

交给智能体安装

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

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

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

其他 MCP 客户端

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

{
  "mcpServers": {
    "factlot": {
      "type": "http",
      "url": "https://api.factlot.com/mcp"
    }
  }
}

README

FactLot

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.

[CI] [Release] [MCP Registry] [Hosted MCP] [License]

Try it in ten seconds

No key, no install:

bash
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@3 so an agent can cite exactly how the number was made.

Check what your agent read from a lease the same way: it extracts each term with the exact quote and page, and doc_verify_facts confirms the quote is on that page and states the value, then returns cited facts or the reason it could not (document verification). No model runs on FactLot's side and nothing is stored.

Check us against your own spreadsheet: seven Excel workbooks (office, industrial, retail, hotel, lender, lease accounting and more) put live Excel formulas beside FactLot's numbers with a difference column of 0.00 (synthetic inputs; ARGUS parity is untested and not claimed). What the registry holds, county by county, and the licence and AI-use rights of every source: coverage and rights.

Lease comps, free: 6,994 federal (GSA) lease comps (5.3 MB, public domain) as cited public-record facts, and an open format with lease_comp_validate so firms can share comps with each other, each with stated rights, no names, and a derived net effective rent (lease comps). GSA leases are government-tenant leases, not market comps for every use. Search them from any agent, hosted, with lease_comp_search.

Connect your agent

ClientHow
Claude Code plugin/plugin marketplace add 9mp96ygnbk-alt/factlot, then /plugin install factlot@factlot: twelve CRE skills (loan sizing, lease economics, CAM, ASC 842, returns and more) wired to the hosted tools (plugin)
Claude Codeclaude 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.5.0.mcpb
ChatGPTDeveloper 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 clientsRemote MCP URL https://api.factlot.com/mcp (guides)
Any MCP client, run locallynpx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz (Node.js 22.6+, no network calls)
Python agentspip install "git+https://github.com/9mp96ygnbk-alt/[email protected]#subdirectory=python"
Self-hosted REST and MCPdocker run -p 8787:8787 ghcr.io/9mp96ygnbk-alt/factlot:0.5.0

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 (23.5 MB, CC BY 4.0) holds 18,077 District of Columbia commercial parcels, 5,513 owning entities, 7,931 cited ownership links, 396 buildings, zoning districts for 16,648 parcels and the latest recorded sale for 12,594.

bash
curl -fLO https://github.com/9mp96ygnbk-alt/factlot/releases/download/registry-sample-dc-2026-11-07/factlot-registry-sample-dc-2026-11-07.db.gz && gunzip factlot-registry-sample-dc-2026-11-07.db.gzFACTLOT_REGISTRY_DB="$PWD/factlot-registry-sample-dc-2026-11-07.db" npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz

Plans: the hosted endpoint is free with no key: every calculator, ID, fact, rules and document tool at 60 requests a minute per IP address, and 25 registry lookups a day per IP address. Pro, $49 a month: 1 API key, 600 requests a minute, 5,000 registry lookups a month, email support. Team, $599 a month: up to 5 API keys, 3,000 requests a minute, 100,000 registry lookups a month, priority support, and a vote on which regions open next. Limits are hard caps with no overage charges; at a cap the call returns HTTP 429 with the reset time. Paid plans renew monthly until cancelled; cancel any time. A registry download licence ($2,400 a year per state file, refreshed weekly, for internal use, not redistribution) is available on request, and Enterprise (private deployment, invoicing, a signed data-processing agreement with a no-training commitment, and SSO) is by quote: [email protected]. Terms · Privacy. Questions and bug reports go in GitHub Discussions and Issues.

Hosted registry

The hosted API at https://api.factlot.com answers registry lookups on every plan, including the free tier with no key (25 registry lookups a day per IP address). These regions are hosted:

RegionHosted dataLicence
MarylandAll 24 jurisdictions: 109,249 commercial parcels and 2,812 buildings, SDAT data as of 2026-11-05Public domain
District of Columbia18,077 commercial parcels, 5,513 registered business entities and 396 buildings, with owners of record (organisations only), zoning and recorded salesCC BY 4.0
UtahJuab and Summit counties: 1,528 parcels, snapshot as of 2025-11-26CC BY 4.0, "State of Utah, SGID"
TexasHarris (87,717 parcels and 3,511 buildings), Dallas (59,645), Travis (30,556), Collin (18,035), Denton (13,304) and Williamson (11,758) counties: 221,015 commercial parcels with value history by tax year, and the 68,804 Comptroller entities that own them. Denton and Williamson are 2027 preliminary rolls as of 2026-11-07. Tarrant County is not servedPublic record, cited per fact; organisation owners only

Maryland, DC, Utah and Texas hold 349,869 parcels in 33 counties. Call registry_coverage first: it lists exactly what is hosted, and a lookup outside it returns a coverage miss. Every answer cites its source file and the licence or attribution that goes with it. The registry is built to keep owners that are organisations and to exclude natural persons' names (if a record names you as a person, or is wrong, email [email protected] and we will remove or correct it), and the Maryland and Utah files carry no owner names. The DC data is the same as the downloadable sample registry-sample-dc-2026-11-07.

The other regions in the project's pipeline (New York City and more) are available only on a self-hosted FactLot with a registry file; more hosted regions open as their terms allow. Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear.

What FactLot is

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:

PackageWhat it doesLicense
@factlot/calcDeterministic 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/idFactLot ID gives canonical IDs for parcels, legal entities, buildings, spaces, leases, and documents. IDs are deterministic wherever the world already has a key (parcels, entities, buildings from their street address, spaces, documents), so any agent can compute them offline; leases get minted IDs.Apache-2.0
@factlot/schemaThe 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/toolsThe tool catalog, with native tool definitions for Claude, OpenAI, Gemini, Amazon Bedrock, Mistral, and OpenAPI platforms, plus one runTool dispatcher.MIT
@factlot/serverThe remote connector: Streamable HTTP MCP at /mcp, REST at /v1, and OpenAPI. Runs in Docker.Apache-2.0
@factlot/mcpAn 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

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, and most of it is not hosted yet. The project's registry pipeline has built and verified 1,733,923 commercial, industrial and multifamily parcels in 330 counties (19 states and DC) from 40 public-record sources, with 14.2 million registered entities from Texas, New York, Colorado, Pennsylvania, DC and Connecticut for owner resolution: the largest metros (Harris, Dallas, Tarrant (not served by the hosted registry), Travis and Collin in Texas, New York City, Los Angeles, Boston, San Francisco, Denver, Charlotte, Minneapolis and DC), the rest of the top 100 counties where the licence allows, and statewide files for New York, Maryland, Massachusetts, Vermont, Arkansas and Connecticut, most of Utah, 24 Minnesota counties and Montana's apartments and industrial parcels (catalog, quality report). What you can query today on the hosted API is Maryland, the District of Columbia, Juab and Summit counties in Utah, and Harris, Dallas, Travis, Collin, Denton and Williamson counties in Texas (349,869 parcels). Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear. Every other region needs a self-hosted FactLot with a registry file. Cook County, Florida, Fulton, Maricopa, Wayne, Fairfax, King and much of California wait on a licence decision, a form or a purchase. Several public files omit owner names (Maryland, Utah, Los Angeles, San Francisco); zoning, recorded sales, deeds and mortgages, energy benchmarks and CMBS loan data only for some metros (coverage); no tenant rosters. See the registry and the source catalog.
  • 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.
  • No SOC 2 report yet. The hosted service keeps no request bodies (see the privacy notice); for confidential documents, self-host FactLot so nothing leaves your network.
  • Hosted, but not yet on npm or PyPI. The hosted endpoint at https://api.factlot.com serves the calculators, IDs, fact tools and registry lookups for the regions above (free at 60 requests a minute); registry regions not hosted need a self-hosted copy with a registry file. To run it yourself, install from the v0.5.0 release, from git, from source, or with Docker (getting started).

Connect FactLot to any AI platform

PlatformHow to connect
ClaudeAdd 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 OpenAICreate a ChatGPT app in developer mode (search/fetch make deep research work), import /openapi-3.0.json (the curated subset of at most 30 operations) as a Custom GPT Action, use the Responses API's remote MCP, or use function calling
Google GeminiUse Gemini API function declarations, Gemini CLI over MCP, or Vertex AI
Microsoft CopilotAdd an MCP tool in Copilot Studio, use the Power Platform connector, or build a Microsoft 365 API plugin
Amazon BedrockUse the Converse API toolConfig, or a Bedrock Agents action group backed by the Lambda handler
Mistral, xAI, Llama, DeepSeek, and othersUse 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).

bash
# From the GitHub release: one file, dependencies bundledclaude mcp add factlot -- npx -y https://github.com/9mp96ygnbk-alt/factlot/releases/download/v0.5.0/factlot-mcp-standalone-0.5.0.tgz
# From a clonegit clone https://github.com/9mp96ygnbk-alt/factlot.git && cd factlotnpm install && npm run buildclaude 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.5.0

Claude Desktop users can install factlot-0.5.0.mcpb from the release. For any other MCP client, use the same command in its config:

json
{  "mcpServers": {    "factlot": {      "command": "node",      "args": ["/absolute/path/to/factlot/packages/mcp/dist/bin.js"]    }  }}

Getting started has every option, including the TypeScript libraries as release tarballs.

The server provides these tools:

  • Calculators: calc_rent_schedule, calc_net_effective_rent, calc_compare_proposals, calc_multifamily_rent_roll, calc_percentage_rent, calc_cam_reconciliation, calc_cam_reconciliation_batch, calc_capex_recovery, 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, calc_dcf_pro_forma, calc_direct_cap, calc_amortization_schedule, calc_equity_waterfall, calc_exchange_1031
  • Rules: rules_tx_property_tax_protest_deadline
  • IDs and facts: id_parcel, id_entity, id_space, id_building, id_document, id_parse, fact_validate, fact_package_create, fact_package_verify, lease_comp_validate
  • Documents: doc_verify_facts, doc_abstract_lease, doc_compare, doc_verify_claim, doc_spread_statement, doc_check_use_conflict
  • Discovery: search, fetch, schema_get
  • Registry (hosted for the regions registry_coverage lists, and on a self-hosted FactLot when FACTLOT_REGISTRY_DB points at a registry file): registry_get, registry_resolve_parcel, registry_resolve_external, registry_search_address, registry_search_entities, registry_owned_by, registry_coverage, registry_tx_equity_candidates

Quick start: Python agents

bash
pip install "git+https://github.com/9mp96ygnbk-alt/factlot.git#subdirectory=python"
python
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

ts
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; // 9750000loan.value.binding_constraint; // "ltv"loan.steps; // every intermediate value, with formulasloan.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.

bash
npm installnpm run check   # lint, format check, typecheck, tests, build

License

FactLot is open source and fully self-hostable, which matters when leases are confidential.

  • Platform: calculators, IDs, rules, the MCP server, the remote connector, and the ingest and registry code are licensed under Apache-2.0.
  • Schema and SDKs: @factlot/schema, @factlot/tools and the client SDKs are licensed under MIT.
  • Hosted service: api.factlot.com runs the same open-source code, free at 60 requests a minute, with paid plans for higher limits.

Docs

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

来源:README.md,提交 b4a689c

工具

58

calc_rent_schedule

Lease rent schedule

Build a base-rent schedule from commencement date, term, area, starting $/SF/yr, escalations (percent or fixed $/SF), and abated months. Lease months run from the commencement day-of-month with no calendar proration (warns when commencement is mid-month). Returns rent steps, totals, expiration date, and a calculation trace. Optional unit (kw, mw, unit, acre, key, room, space) relabels area and $/SF for data-center, ground, yard, residential, hotel, or parking leases without changing any number. Deterministic: use this instead of doing the math yourself; cite formula calc.rent_schedule@1 and the returned steps, and surface any warnings.

输入参数unitarea_sf必填escalationterm_months必填abated_monthsinclude_monthlycommencement_date必填round_rate_to_centsstarting_rent_psf_annual必填

calc_net_effective_rent

Net effective rent (NER)

Compute effective rent, straight-line net effective rent, and discounted net effective rent ($/SF/yr) after free rent, TI allowance, leasing commissions, and other landlord concessions. Rent is monthly in advance from the commencement day (no calendar proration), discounted at annual rate ÷ 12. schedule.unit (kw, mw, unit, acre, key, room, space) reports $/kW/yr, $/acre/yr and so on instead of $/SF/yr. Deterministic: use this instead of doing the math yourself; cite formula calc.net_effective_rent@1 and the returned steps, and surface any warnings.

输入参数schedule必填ti_allowance_psfother_concessionsleasing_commissionsdiscount_rate_annual

calc_compare_proposals

Compare lease proposals

Rank 2–20 lease proposals with different terms, sizes, free rent, TI, concessions, and operating-expense structures (gross, NNN, base year, expense stop, with opex growth) on one discounted $/SF/yr basis, per rentable or usable SF (load factor): effective occupancy cost (tenant perspective) or discounted net effective rent after landlord-borne opex and optional pre-commencement downtime (landlord perspective). Cash flows monthly in advance at annual rate ÷ 12; warns when the usable-SF ranking differs and when terms differ. schedule.unit (kw, mw, unit, acre, key, room, space, the same for every proposal) ranks per kW, MW, unit, acre, key, room, or space instead of per SF. Deterministic: use this instead of doing the math yourself; cite formula calc.compare_proposals@2 and the returned steps, and surface any warnings.

输入参数proposals必填area_basisperspectivediscount_rate_annual

calc_multifamily_rent_roll

Multifamily rent roll

Analyze an apartment rent roll (up to 5,000 units with status occupied, notice, vacant, model, or down; market and lease rent per month; lease dates; concessions as weeks free, months free, or dollars): gross potential rent, vacancy, non-revenue units, loss to lease, concessions amortised straight-line over each lease term, effective rent income, physical and economic occupancy, effective rent per unit and per SF, a lease expiration schedule by month, and a per-unit-type summary. Single-lease mode (lease instead of units) returns the effective monthly rent after a weeks-free or months-free concession. Deterministic: use this instead of doing the math yourself; cite formula calc.multifamily_rent_roll@1 and the returned steps, and surface any warnings.

输入参数as_ofleaseunitsinclude_units

calc_percentage_rent

Retail percentage rent

Percentage (overage) rent for a lease year: net sales after exclusions over a natural or fixed breakpoint, prorated for partial years, less amounts already paid. Deterministic: use this instead of doing the math yourself; cite formula calc.percentage_rent@1 and the returned steps, and surface any warnings.

输入参数rate必填breakpointgross_sales必填period_fractionbase_rent_annual必填sales_exclusionspercentage_rent_paid

calc_cam_reconciliation

CAM / operating expense reconciliation

Reconcile a tenant's annual CAM charge: exclusions, occupancy gross-up of variable expenses, pro rata share, controllable-expense caps (compounding_from_base, simple_from_base, year_over_year), an admin fee (before or after the cap, inside or outside it, with per-line exclusions), base year or expense stop, partial-year occupancy (move-in/move-out prorates share, cap, and base by days), and estimates paid. Returns balance due and a full trace with order-of-operations warnings. Deterministic: use this instead of doing the math yourself; cite formula calc.cam_reconciliation@2 and the returned steps, and surface any warnings.

输入参数capyear必填expenses必填gross_upadmin_feeoccupancystructureestimates_paidpro_rata_share必填

calc_cam_reconciliation_batch

CAM reconciliation for every tenant (batch)

Reconcile CAM for a whole building in one call: the expense pool and gross-up once, then up to 500 tenants each with share, base year or expense stop, cap, admin fee, occupancy, estimates paid, and lease-specific excluded categories. Returns each tenant's statement (identical to calc_cam_reconciliation for that tenant, with its trace and warnings) and a building reconciliation: total billed against the recoverable pool, the unrecovered amount, and why (unleased or vacant share, lease exclusions, gross-up, caps, base years and stops, admin fees, zero floor, rounding). Deterministic: use this instead of doing the math yourself; cite formula calc.cam_reconciliation_batch@1 and the returned steps, and surface any warnings.

输入参数year必填tenants必填expenses必填gross_up

calc_capex_recovery

Capital expenditure recovery

Recoverable capital expenditure under a lease clause: amortize a capital cost over its useful life or the lease-specified period, straight-line (declining interest) or level payment, with interest on the unamortized balance or none; optionally cap each year's recovery at demonstrated cost savings (with or without carry-forward); and allocate each year to tenants by pro rata share. Every assumption is echoed with an optional lease clause citation. Deterministic: use this instead of doing the math yourself; cite formula calc.capex_recovery@1 and the returned steps, and surface any warnings.

输入参数cost必填methodclausestenantsfirst_yearperiod_basiscost_savings_capamortization_years必填interest_rate_annual

calc_debt_sizing

Loan sizing (LTV / DSCR / debt yield)

Size the maximum loan under any combination of max LTV, min DSCR, and min debt yield for a given NOI, rate, and amortization. Reports the binding constraint, debt service, and resulting metrics; optionally a stress table over NOI, rate, and value shocks (max loan, binding constraint, LTV, DSCR, debt yield per scenario) and the refinance shortfall against an existing loan balance. Deterministic: use this instead of doing the math yourself; cite formula calc.debt_sizing@3 and the returned steps, and surface any warnings.

输入参数noi必填valuestressmax_ltvmin_dscrrate_annual必填round_down_tomin_debt_yieldamortization_years必填existing_loan_balance

calc_lease_remeasurement_asc842

Lease remeasurement (ASC 842, lessee)

Remeasure a lessee's lease liability and right-of-use asset under ASC 842 after a modification, lease-term reassessment, contingency resolution, or residual value guarantee change: new liability (PV of remaining payments), liability and ROU adjustments with any gain (ASC 842-20-35-4), and the per-period amortization table (operating: straight-line single lease cost; finance: interest plus amortization) in cents that foots: every row rolls forward exactly, totals are the row sums, and the final period trues up liability and ROU asset to zero. Warns where judgment is needed. Deterministic: use this instead of doing the math yourself; cite formula calc.lease_remeasurement_asc842@2 and the returned steps, and surface any warnings.

输入参数event必填payments必填classification必填payment_timingliability_before必填periods_per_yearrou_asset_before必填remaining_periodsdiscount_rate_annual必填discount_rate_updated必填

calc_prepayment_and_defeasance

Loan prepayment premium and defeasance

Prepayment premium, total payoff, and cost as a share of balance for a fixed-rate amortizing or interest-only loan under yield maintenance (PV of remaining payments or rate differential, with a minimum and an explicit discounting convention), a step-down schedule, a flat percentage, or defeasance (cost of the securities portfolio that funds the remaining payments plus stated costs). Deterministic: use this instead of doing the math yourself; cite formula calc.prepayment_and_defeasance@1 and the returned steps, and surface any warnings.

输入参数balance必填prepayment必填accrued_interestnote_rate_annual必填amortization_months必填remaining_term_months必填

calc_walt

Weighted average lease term (WALT)

Weighted average remaining lease term in years as of a date (actual days ÷ 365.25), weighted by each lease's area_sf (weight_by "area") or annual_rent (weight_by "rent"). Deterministic: use this instead of doing the math yourself; cite formula calc.walt@1 and the returned steps, and surface any warnings.

输入参数as_of必填leases必填weight_by

calc_npv

Net present value

NPV of periodic cash flows (t = 0, 1, 2, ...; the t = 0 flow is not discounted) at a per-period discount rate given as a decimal. Deterministic: use this instead of doing the math yourself; cite formula calc.npv@1 and the returned steps, and surface any warnings.

输入参数rate必填cash_flows必填

calc_irr

Internal rate of return

Periodic and annualized IRR of periodic cash flows, as decimals (0.085 = 8.5%), solved deterministically by scanning a 1-point grid of per-period rates and bisecting each sign change; reports every root it finds when cash flows have multiple IRRs (two roots within one grid step can be missed). Errors when the flows do not change sign or no root lies between -99.99% and 1000% per period. Deterministic: use this instead of doing the math yourself; cite formula calc.irr@2 and the returned steps, and surface any warnings.

输入参数cash_flows必填periods_per_year

calc_lease_vs_own

Lease vs. own

Compare leasing with buying over a fixed horizon: NPV of each case's annual cash costs (rent, free rent, tenant expenses, and move-in costs versus equity, debt service, owner expenses, reserves, and a sale at the horizon by stated value or exit cap rate), optionally after tax, with the year-by-year tables and the break-even residual value at which owning equals leasing. Deterministic: use this instead of doing the math yourself; cite formula calc.lease_vs_own@2 and the returned steps, and surface any warnings.

输入参数own必填lease必填horizon_years必填discount_rate_annual必填

calc_renew_vs_relocate

Renew vs. relocate

Compare renewing in place with moving over one horizon: NPV and discounted effective rent of each case (rent schedule with free rent, TI net of allowance, fees, moving, downtime, double rent, termination, and disruption costs), the starting rent at which they break even, and year-by-year cash flows. Deterministic: use this instead of doing the math yourself; cite formula calc.renew_vs_relocate@2 and the returned steps, and surface any warnings.

输入参数renew必填relocate必填horizon_months必填current_rent_monthlydiscount_rate_annual

calc_hotel_metrics

Hotel operating metrics (USALI)

Occupancy, ADR, RevPAR, TRevPAR, and a USALI-style profit ladder for a period: departmental profit, GOP and margin, GOPPAR, management fees, EBITDA, FF&E reserve, and NOI (EBITDA less replacement reserve). Deterministic: use this instead of doing the math yourself; cite formula calc.hotel_metrics@1 and the returned steps, and surface any warnings.

输入参数rooms必填nights必填fb_revenuerooms_sold必填room_revenue必填other_revenueffe_reserve_raterooms_out_of_ordermanagement_fee_ratemanagement_fee_fixeddepartmental_expensesnon_operating_expenses另有 1 个

calc_dcf_pro_forma

Property DCF from a rent roll

Property-level discounted cash flow from an in-place rent roll: each lease's rent, escalations, remaining term, and expense recovery (NNN, gross, base year), then at expiration one blended lease weighted by the renewal probability (renewal vs new-tenant rent, free rent, TI, leasing commissions, and new-tenant downtime, with fractional downtime and free rent kept as part months rather than rounded); market rent growth, general vacancy and credit loss, operating expenses, management fee, and capital reserves. Returns the annual cash-flow table (NOI and cash flow before debt) for the hold plus one year, the exit value at a cap rate on forward (or trailing) NOI less selling costs, the value (PV at the discount rate, end-of-year or mid-year), and with a purchase price the NPV, unlevered IRR, and equity multiple, with every lease event and convention stated. Deterministic: use this instead of doing the math yourself; cite formula calc.dcf_pro_forma@2 and the returned steps, and surface any warnings.

输入参数leases必填timinghold_years必填discount_rate必填exit_cap_rate必填exit_noi_basismarket_leasing必填purchase_pricecredit_loss_rateselling_cost_rateexpense_growth_ratemanagement_fee_rate另有 5 个

calc_direct_cap

Direct capitalization value and implied cap rate

Value by direct capitalization: (NOI − capital reserve) ÷ cap rate, then below-the-line deductions for lease-up costs, free-rent burn-off, and other adjustments to an as-is value (optionally rounded); and the cap rate a price implies, before and after reserves and all-in after the below-the-line costs. Records the NOI basis (trailing, forward, stabilized). Deterministic: use this instead of doing the math yourself; cite formula calc.direct_cap@1 and the returned steps, and surface any warnings.

输入参数noi必填pricearea_sfcap_ratenoi_basislease_up_costsround_value_toother_adjustmentsfree_rent_burn_offcapex_reserve_annual

calc_amortization_schedule

Loan amortization schedule

Period-by-period schedule of a fixed-rate loan, monthly or quarterly: an optional interest-only period, then level payments on an amortization term that can run past maturity (balloon), with 30/360, actual/360, or actual/365 interest (the payment on a 30/360 basis). Rows are in cents that foot: interest is rounded each period, the final payment repays the whole balance, and the totals are the row sums. Deterministic: use this instead of doing the math yourself; cite formula calc.amortization_schedule@1 and the returned steps, and surface any warnings.

输入参数day_countprincipal必填start_daterate_annual必填term_months必填payment_frequencyamortization_months必填interest_only_months

calc_equity_waterfall

LP/GP equity distribution waterfall

Split periodic project equity cash flows between LP and GP: preferred return (compounding or simple) and return of capital pro rata to capital in either order, an optional GP catch-up, IRR-hurdle tiers with promote splits measured on the LP's IRR, and a residual split. Returns per-period LP and GP contributions and distributions (with the GP's promote) that foot to the cent, and LP, GP, and project IRRs and multiples, with the conventions to confirm against the operating agreement. Deterministic: use this instead of doing the math yourself; cite formula calc.equity_waterfall@1 and the returned steps, and surface any warnings.

输入参数preftierscatch_uplp_share必填cash_flows必填periods_per_yearresidual_promotedistribution_order

calc_exchange_1031

1031 exchange deadlines, identification, and boot

Not tax advice: arithmetic only. The 45-day identification and 180-day exchange deadlines of IRC §1031(a)(3) (the exchange period ends earlier at a given tax-return due date), the three-property, 200%, and 95% identification tests of Treas. Reg. §1.1031(k)-1(c)(4), and the cash boot, mortgage boot, debt replacement, and trade-down of an exchange, with the boot-limited gain when the basis is given. Deterministic: use this instead of doing the math yourself; cite formula calc.exchange_1031@2 and the returned steps, and surface any warnings.

输入参数as_ofreplacementrelinquished必填tax_return_due_datecash_received_at_saleidentified_propertiesrelinquished_transfer_date必填

calc_critical_dates

Lease critical dates

Dated list of a lease's notice deadlines and option windows, from its expiration date and options: each renewal option's notice deadline or notice window and renewal term (successive options count back from the term before), each termination option's last day to give notice, an expansion option deadline, and other deadlines (a stated date, or N days after a date such as a ROFO notice). Calendar months; N months before a date keeps the day of month, clamped to a shorter month's end (a warning gives the month-end reading when it is later). Deadlines on a weekend or US federal holiday (5 U.S.C. §6103, observed days included) are flagged, or rolled to the preceding or following business day when business_day_roll says so. With as_of: days to each event, passed deadlines warned, and the next deadline. Steps show each computation. Deterministic: use this instead of doing the math yourself; cite formula calc.critical_dates@1 and the returned steps, and surface any warnings.

输入参数as_ofholidaysrenewal_optionexpiration_date必填other_deadlinesbusiness_day_rollcommencement_datetermination_optionsexpansion_option_deadline

calc_reconcile_dcf

Tie out a DCF against another system's annual lines

Reconcile FactLot's DCF with another system's export (ARGUS or any other model; parity is not claimed and is untested against real ARGUS output): give the calc_dcf_pro_forma input plus the other system's annual lines {label, values: [year 1, …]}, optionally its value, unlevered IRR and sale price, a tolerance (absolute and relative) and your label mapping. Labels map to FactLot lines by your mapping, else by common CRE line names (Potential Base Rent, Absorption & Turnover Vacancy, Free Rent, Expense Reimbursements, General Vacancy, Credit Loss, Effective Gross Revenue, Operating Expenses, Net Operating Income, Tenant Improvements, Leasing Commissions, Capital Reserves, Cash Flow Before Debt Service); positive deductions are negated (sign_convention). Returns per line and year FactLot's amount, the other amount, the difference and whether it is within tolerance; unmapped labels; and for each differing line a likely_cause from FactLot's documented conventions, worded as a hypothesis to check: differences only in rollover years (fractional downtime and free rent), a rate on a different base (general vacancy), only the exit year, a one-year shift, management fee inside operating expenses, a growth rate, a constant factor or amount, rounding; and for the value FactLot rerun with mid-year or end-of-year discounting, the other exit NOI basis, or no selling costs. Deterministic: use this instead of doing the math yourself; cite formula calc.reconcile_dcf@1 and the returned steps, and surface any warnings.

输入参数dcf必填other必填mappingtolerancesign_convention

calc_reconcile_cam

Tie out CAM reconciliations against another system's results

Reconcile FactLot's CAM reconciliation for one expense pool with another system's per-tenant results (Yardi or any other; parity is not claimed and is untested against a real export): give the calc_cam_reconciliation_batch input plus, per tenant, what the other system reported (share, gross-up, cap limit and reduction, admin fee, base-year or stop deduction, billed amount, estimates, balance; billed_amount required) and a tolerance. Returns per tenant and line FactLot's amount, the other amount, the difference and whether it is within tolerance, tenants missing on either side, and likely causes worded as hypotheses to check: a different pro rata share (and, when every share differs by one factor, the pool's denominator), or a FactLot rerun that matches the other system with lines left to the default controllable: true set uncontrollable, the cap's base year one year off, the other cap method, the other gross-up target or no gross-up, the admin fee before or after and within or outside the cap, or no fee on uncontrollable lines; and differing estimates paid. Deterministic: use this instead of doing the math yourself; cite formula calc.reconcile_cam@1 and the returned steps, and surface any warnings.

输入参数cam必填other必填tolerance

calc_tx_unequal_appraisal

Texas unequal appraisal: median of adjusted comparables

Evidence calculation only: not an appraisal or an opinion of value, not legal or tax advice, and not a substitute for the advice of an attorney. The arithmetic of Tex. Tax Code §41.43(b)(3) and §42.26(a)(3), the subject's value against the median appraised value of a reasonable number of comparable properties appropriately adjusted. Takes 3–200 comparables chosen by the caller, each with its roll value and the caller's adjustments (percent, USD amount, or $/SF, each with a reason); optionally normalizes each comparable to value per SF of improvement or land area times the subject's area; applies percentages summed or compounded, then amounts; and returns every comparable's normalized and adjusted value, the sorted list, the median (for an even count, the mean of the two middle values), and the subject's value minus the median in USD (subject_minus_median) and as a fraction of the median (subject_minus_median_pct: 0.1554 means 15.54%, a decimal like every rate in FactLot, not 0.1554%), with the statutes cited. Warns on mixed value bases, §42.26(d) and the §23.231 limitation, comparables in another county, fewer than 5 comparables, total adjustments over 25%, and a comparable identical to the subject. It does not choose comparables, invent adjustments, or say whether to protest. Deterministic: use this instead of doing the math yourself; cite formula calc.tx_unequal_appraisal@1 and the returned steps, and surface any warnings.

输入参数subject必填tax_year必填comparables必填normalize_byadjustment_combine

rules_tx_property_tax_protest_deadline

Texas property tax protest deadline

Deadline to file a Texas property tax protest with the appraisal review board: the later of May 15 or 30 days after the notice of appraised value was delivered, rolled past weekends and Texas legal holidays, plus a conservative file-by date (the last business day on or before the unadjusted deadline). Returns the statute citations, the rule's verification status and a disclaimer. Information about a statutory deadline: not legal or tax advice and not a substitute for the advice of an attorney. Verification status: verified. Cite rule rules.tx.property_tax_protest_deadline@2 and its statutes.

输入参数tax_year必填notice_delivered_date

rules_tx_property_tax_protest_deadline_batch

Texas property tax protest deadlines (batch)

Texas property tax protest deadlines for many notices in one call (1–200 items, e.g. a consultant's client list): each item's id, tax year and, if known, notice delivery date. Each result is exactly what rules_tx_property_tax_protest_deadline returns for that item under rule rules.tx.property_tax_protest_deadline@2 (deadline, unadjusted deadline, governing basis, conservative file-by date, skipped days, the item's warnings), echoed with its id; an item with invalid input carries its error and the others are still answered. summary counts the items per deadline, earliest first, with the earliest and latest deadline. The statute citations, the rule's verification status and the disclaimer appear once (value.rule, value.disclaimer). A rules tool: never a registry lookup. Information about statutory deadlines: not legal or tax advice and not a substitute for the advice of an attorney; it does not say whether to protest. Verification status: verified. Cite rule rules.tx.property_tax_protest_deadline_batch@1 and its statutes.

输入参数items必填

id_parcel

FactLot parcel ID

Deterministic FactLot ID for a parcel from state FIPS, county FIPS, and the assessor's parcel number (APN). The same parcel always yields the same ID, offline. Use it as the join key across systems. APNs that differ only in where a separator falls ("12-34", "1-234") get different IDs; in a county with a documented fixed-width format the variants of one APN converge (NYC BBL "3-1234-56" = "3012340056").

输入参数apn必填state_fips必填county_fips必填

id_entity

FactLot legal-entity ID

Deterministic FactLot ID for a legal entity (LLC, LP, corporation, trust) from its registry jurisdiction and file number, or from its LEI (an LEI whose ISO 17442 check digits do not match is rejected).

输入参数jurisdiction必填registry_number必填

id_space

FactLot space (suite) ID

FactLot ID for a suite or unit within a building, given the building's FactLot URN (from id_building). Suite designators are normalized: "Suite 100", "Ste 100" and "#100" agree, while "1-20" and "120" stay distinct.

输入参数suite必填building_urn必填

id_building

FactLot building ID

Deterministic FactLot ID for a building from its street address: county FIPS, ZIP code, and street line. Every condominium unit, suite, and floor at the address gets the same building ID, offline. Pass it to id_space for a suite, or to registry_get to see the building's parcels.

输入参数zip必填street必填state_fips必填county_fips必填

id_document

FactLot document ID

Content-addressed FactLot ID (SHA-256) for a document such as a lease, amendment, or estoppel.

输入参数textcontent_base64

id_parse

Parse a FactLot ID

Validate a FactLot URN and return its kind, components, and short ID.

输入参数urn必填

fact_validate

Validate a FactLot fact

Check one FactLot fact against the published fact schema (spec/schemas/fact.json): subject URN, dotted predicate, as_of date, provenance, optional rights; unknown fields are rejected at every level. Rules: every fact except a computed one cites at least one source (an inferred fact cites the evidence it was inferred from); a computed fact names its formula or cites a source; valid_from is not after valid_to; a source span does not end before it starts. For Ingest predicates (lease.expiration_date, lease.rentable_area_sf, lease.base_rent_schedule, ...) the value must have the predicate's shape and every source quote must state the value, by the same written-form rules as doc_verify_facts (a quote saying "2,500 square feet" does not support 1000). Not checked: that the quote is in the document, that the document or sha256 exists, that supersedes IDs exist, and quotes for other predicates; doc_verify_facts with the document's pages checks the quote. Returns { valid, issues }. Call before storing or sharing facts.

输入参数fact必填

doc_verify_facts

Verify extracted document facts

Check values YOU extracted from a document against its text, deterministically; FactLot runs no model. Send the pages as text and one candidate per value: {predicate, value, quote, page}. Each candidate is checked in order: (1) the value's shape (Ingest predicates such as lease.expiration_date YYYY-MM-DD, lease.pro_rata_share in (0, 1], ordered lease.base_rent_schedule steps; any other dotted predicate needs a non-empty value); (2) the quote, at least 12 characters, is on the cited page, where only whitespace, line breaks, letter case and typographic quotes and dashes may differ (a word hyphenated across a line must keep its hyphen; a quote found on exactly one other page is accepted with the page corrected); (3) every number, date and party name in the value is written in the quote, in any common form: 1250000 matches "$1,250,000.00", 0.03 matches "3%" or "three percent", 2031-06-30 matches "June 30, 2031" or "6/30/2031"; text the lease states as written (a prohibited use, a carve-out, a protected use) is written in it as words, ignoring case, punctuation and line breaks; (4) a confidence you give below 0.8 holds it for review; (5) every other part of the value must be confirmed by the quote too: a true/false value, an enum or a summary not written in the quote holds the candidate for review, named in the reason. Verified means every part of the value was found in the quote. Returns verified (FactLot facts: method extracted, citing document_id, page, quote and character span, plus which value parts were checked and as what), needs_review (the quote is on the page but does not state the value: check consistency; low confidence: confidence; a part FactLot cannot confirm from the quote, such as a boolean: coverage) and rejected (wrong shape; quote missing, too short, or on several pages), each with a reason to act on. Not checked: meaning (a quote stating the number in another context passes), and whether the pages came from the file whose sha256 you give.

输入参数as_of必填subjectdocument必填candidates必填

doc_abstract_lease

Lease abstract with amendments

Current-state lease abstract from a lease and its amendments, with amendment precedence, as of as_of. Give each document's pages with the candidates you extracted (checked exactly as doc_verify_facts checks them), or the facts doc_verify_facts already returned for it (without pages only the value against its quote is rechecked, marked quote_on_page: false). Documents may come in any order: give the lease role original and each amendment role amendment with its effective_date (without a role the lease is inferred only when that is unambiguous, otherwise it is an input error; two or more amendments need effective dates). The original applies first, then amendments by effective_date; a later document's value for a predicate controls, and the earlier one moves to history and is linked through supersedes. An amendment effective after as_of is pending: its values are listed under pending and pending_facts with a warning and do not control. A rent schedule restated from a later date keeps the earlier steps before it (carried_forward). Each field gives its value, the controlling document, page, quote and fact, the superseded history, conflicts (two different values from one document, or from two documents of the same rank), pending values and open_items (a candidate for that predicate in the controlling or a later document that needs review or was rejected, so the value may not be final). FactLot only orders what you extracted: it does not find terms you missed, and an amendment that changes a term without restating it ("extended by 24 months") needs the resulting value extracted with that sentence as its quote, which the quote check will hold for review if the date is not written there.

输入参数as_of必填subjectdocuments必填

doc_compare

Compare asserted values with a lease

Compare values another document asserts (an estoppel, rent roll or offering memo, mapped by you to predicates) with verified lease facts from doc_abstract_lease or doc_verify_facts. Each asserted value comes back match, mismatch (with the differing fields), not_in_lease, or ambiguous_in_lease (two current lease facts disagree), with the controlling lease citation (document, page, quote). Values compare exactly as JSON: numbers by value, strings exactly (a name written differently is a mismatch), and for an object only the fields you assert. Facts another fact supersedes are ignored. When the lease fact is an extracted fact whose quote does not confirm part of its value (a true/false value, an enum), the result lists those parts in lease_not_checked. The lease facts must pass fact_validate; FactLot does not re-read the lease, so pass the facts its document tools returned.

输入参数asserted必填lease_facts必填

doc_verify_claim

Verify a claim against a document

Check one claim against a document page: {predicate, value} (anything doc_verify_facts accepts) or a short claim sentence ({text} or a bare string), plus the verbatim quote and page it rests on. Returns supported (the quote is on the page and every checked number, date and name in the claim is written in it), contradicted (the quote is on the page and states other numbers or dates of the same kind, listed in quote_states), or unverifiable (the quote is not on the page, nothing in the claim can be checked, or the quote states no value of that kind), with the evidence (document_id, page, quote, span) and each part checked. Textual, not semantic: for a sentence only its numbers and dates are compared, never its meaning, and a quote that mentions the right number for a different term still supports it.

输入参数page必填claim必填quote必填document必填

doc_spread_statement

Spread an operating statement

Spread a T-12, operating statement, budget or rent roll summary YOU read, onto FactLot's published chart of accounts (multifamily, commercial, or hotel after the USALI summary), deterministically; FactLot runs no model. Send the pages as text and one line per item: {label, amount, quote, page}, optionally your category, a period column, and for a subtotal the indexes of the lines it sums; give the statement's own totals (effective_gross_income, total_operating_expenses, net_operating_income, ebitda, ...) as lines with that total as category. Each line is checked: the quote is on the page (a quote under 12 characters, such as a short row, only where it stands as whole words), the amount (as a number, any common written form; (1,200) and -1,200 read as negative) and the label are written in it; a line that fails is excluded with the reason, and a stated total that does not foot names the lines left out. The label is mapped to the chart by keywords: your category is used when it is in the chart, and an exception flags it for review when the dictionary maps the label elsewhere; an ambiguous or unknown label without a category is excluded. Vacancy, concessions, credit loss and other contra lines are always subtracted. Returns per period the sections, the computed totals (EGI, operating expenses, NOI, capital items, net cash flow; for hotels departmental profit, GOP, EBITDA and NOI after the replacement reserve), whether each total and subtotal the statement states foots (within 0.5 per line added, or your tolerance), every line with its citation (document, page, quote, span) and status, statistics (units, occupancy, ADR), and exceptions to review. Not checked: whether the agent missed lines, and meaning beyond the written amount and label.

输入参数lines必填perioddocument必填toleranceproperty_type必填statement_type

doc_check_use_conflict

Check a proposed use against exclusives

Check a proposed use (a description, plus an optional use category or 2022 NAICS code) against a center's verified lease.exclusive_use and lease.prohibited_uses facts (from doc_verify_facts or doc_abstract_lease; each must pass fact_validate). Deterministic and textual: a restriction is a potential conflict when it shares a use category with the proposed use (FactLot's published use-category vocabulary, matched on keywords, the category given and NAICS codes) or shares words with it (two or more, or every significant word of the restriction). Each hit is labelled "potential conflict — needs human review" and returns the controlling quote and citation, the categories and words that matched, and the exclusive's carve-outs, flagging those that mention the proposed use. FactLot does not interpret the lease, decide whether a carve-out applies, or give legal conclusions; an empty result does not mean there is no conflict. Superseded facts are ignored.

输入参数facts必填proposed_use必填

doc_predicates

Lease predicate catalog

Look up the lease predicates doc_verify_facts and doc_abstract_lease know (lease.expiration_date, lease.base_rent_schedule, lease.go_dark, ...) before extracting: for each, its value shape as JSON Schema, one valid example with a quote that states it (and whether that example verifies), which parts of the value are checked against the quote and how (number, ratio, date, verbatim name, as-written words, a worded enum, a number inside free text), which count as checked only when the quote writes them out (summaries, some enums), and which always need review (true/false values and enums no wording confirms, such as a CAM cap method or a kick-out party) unless a person confirms them. Generated from the same tables the checks use. Give predicate for one, prefix (e.g. lease.renewal) for a group, or neither for all. Also returns notes on statuses, paths, human confirmation and the generic rules for any other dotted predicate. Reads no document.

输入参数prefixpredicate

fact_package_create

Create a fact package

Bundle FactLot facts (each must pass fact_validate) into a fact package a counterparty can verify: canonical JSON (RFC 8785) of every fact, an RFC 6962 Merkle tree over the facts, the source documents the facts cite with their sha256 where known, and a digest over all of it. Returns the unsigned package, its digest, and signing_message, the exact text to sign. FactLot never holds private keys: to sign, the holder signs signing_message with their own Ed25519 key on their own machine (factlot.sign_fact_package in Python, signFactPackage in @factlot/tools, or fact_package_sign in the local MCP server). Deterministic: no clock time is added (pass created_at), and the same facts always give the same digest.

输入参数facts必填titledocumentscreated_atcreated_by

fact_package_verify

Verify a fact package

Verify a fact package from fact_package_create: recompute every fact's hash, the Merkle root and the digest from the content (any changed fact, title, date or document list shows as a mismatch); check each fact against fact_validate; check the Ed25519 signature, against the public_key you pass (base64url, the signer's key you trust) or, without one, only against the key inside the package (which proves nothing about who signed); and, given the source documents' pages, check every quote is on its cited page. Returns valid plus each check's details, checks_run and checks_not_run (what was and was not checked), and values_not_checked: the parts of extracted facts' values that their quotes do not confirm (a true/false value, an enum, a summary), which do not change valid. Not checked: that the pages you pass are the original files (pass sha256 to tie them to the file hash), or what the facts mean.

输入参数package必填documentspublic_key

lease_comp_validate

Validate a lease comp and derive its NER

Check a lease comparable one firm shares with others, as a FactLot fact with predicate lease.comp, and derive its net effective rent. The fact goes through fact_validate (schema, citations, rights), then the comp's own rules: shape (spec/schemas/fact.json LeaseComp: area, commencement, term or expiration, starting or current rent, escalation, free rent, TI, leasing commissions, expense basis, confirming party, verification), an expiration after commencement, a term that matches the dates, free rent within the term, no email, phone or ID number in the text. A comp names no person or company. With the default share profile it also needs the deal's starting rent, escalations, free rent, TI, property type, an expense basis other than unknown, and stated rights. When valid and a starting rent is given, ner.fact is a computed lease.net_effective_rent fact (formula calc.net_effective_rent@1, straight-line and discounted at discount_rate_annual, on the comp's own expense basis; no conversion between full service and net). Returns { valid, issues, warnings, ner }. Call before sharing a comp.

输入参数fact必填profilediscount_rate_annual

registry_get

Get a registry record

Everything the FactLot Registry knows about a parcel, legal entity, or building: status, current cited facts (owner of record, situs address, property category, areas, values), ownership links, external IDs, and for a parcel the building it belongs to (condominium units roll up into one building). value_history (parcels) lists market and appraised value by tax year from every snapshot, newest first, each value cited; a tax year two snapshots value differently appears once per value. as_of gives the facts as they stood on a date. warnings flags area facts that look wrong (building area above 40 times the land area, a land area of 0); the facts themselves are as the source publishes them. A building record can carry debt.cmbs_loan facts (one per CMBS trust holding a note of its loan: balance, rate, maturity, payment status, servicer, special-servicing dates, NOI, DSCR) and an entity record can carry entity.parent facts (the SEC registrant that lists it as a subsidiary in Exhibit 21), each cited to its SEC filing. A miss says whether the county or entity registry is loaded. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数urn必填as_ofinclude_history

registry_resolve_parcel

Resolve a parcel in the registry

Find a parcel's FactLot URN from state FIPS, county FIPS, and APN, if the registry holds it. A miss returns urn null with coverage: whether that county is loaded in this registry. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数apn必填state_fips必填county_fips必填

registry_resolve_external

Resolve an external ID

Find the FactLot URN for an ID from another system, e.g. system "sdat_account" (a Maryland SDAT account number) or, where Texas is hosted, "hcad_account" (a Harris CAD account number). Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数system必填external_id必填

registry_search_address

Search parcels by address

Find commercial parcels by situs address. Matches whole words of the street line (the part before the first comma), normalized: 'Street' = 'St', 'Northwest' = 'N.W.' = 'NW'; a suite, unit, '#' or floor is ignored. Give a house number ('1200 Main', '1200 Main St NW') or a street name with its type ('Main St'); a city or a part of a word alone matches nothing. No match returns coverage: what this registry holds. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数limitquery必填

registry_search_entities

Search legal entities by name

Find registered business entities (LLCs, LPs, corporations) by name. Natural persons are not searchable. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数limitquery必填

registry_owned_by

Parcels owned by an entity

Commercial parcels currently linked to a legal entity as owner of record (inferred links carry a confidence), each with the building it belongs to, plus a per-building summary so condominium units count once per building. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数entity_urn必填

registry_coverage

What the registry holds

The counties (with parcel and building counts), entity registries, and crosswalk systems this FactLot Registry file holds, each with its sources and as-of dates. Call it before concluding that a parcel or entity does not exist: a miss outside these regions means not loaded, not absent. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

无需输入参数。

registry_tx_equity_candidates

Texas unequal-appraisal candidates

Candidate comparable parcels for a Texas unequal-appraisal comparison (Tax Code §41.43(b)(3)), from one tax year of the subject's appraisal district roll (the newest year whose roll gives the subject a value, or tax_year), with every field of the subject and the candidates read from that year's roll only: same county and tax year, the same state property category code, improvement area within area_band of the subject's, year built within year_band years when both are known; parcels sharing the subject's neighborhood code first (when the roll gives one), then its ZIP code, then the rest of the county if fewer than min_matches. Each candidate and the subject are shaped for calc_tx_unequal_appraisal (id, value and value_basis, areas, year built, codes, citation of the value fact); the subject adds its value history by tax year. selection echoes the rule, the effective parameters, the tax year and roll sources used, and which tier each candidate came from; Each candidate's citation.document_id names its entry in sources, which gives that snapshot's license, attribution, ai_use and redistribution: relay them with the candidate. Candidates under FactLot's default rule, a design choice, not a legal standard; a person decides which, if any, to use. For evidence calculations only: FactLot does not represent property owners, file protests, or advise whether to protest. Not an appraisal or an opinion of value (Tex. Occ. Code §1103.003(1)); not legal or tax advice and not a substitute for the advice of an attorney. Never returns owner names, mailing addresses, or ownership facts. Do not look up the owners of candidate parcels; ownership is not needed for this comparison. Texas parcels only. Tarrant County is not served by the hosted registry while the publisher's terms for AI use are unclear. Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数apnurnlimittax_yeararea_bandyear_bandstate_fipscounty_fipsmin_matches

registry_tx_equity_candidates_batch

Texas unequal-appraisal candidates (batch)

registry_tx_equity_candidates for many subjects in one call (1–50, e.g. a consultant's client parcels): each subject's id (your label, echoed back) and its urn, or county_fips and apn, plus the rule parameters once for every subject (area_band, year_band, min_matches, limit, tax_year). Each entry of results is that subject's answer from registry_tx_equity_candidates (subject, candidates, selection, sources, warnings) or that subject's error (error, message, issues, and coverage on a miss), so one subject outside Texas, in Tarrant County, or not in the registry does not fail the others; the Texas-only and Tarrant checks apply to each subject. The selection rule and the notice appear once at the top (rule, notice) instead of in every answer; summary counts subjects, answered and errors. Candidates per subject only: this tool never runs calc_tx_unequal_appraisal and never picks comparables; a person decides, for each subject, which candidates (if any) to use, and only those go to calc_tx_unequal_appraisal. Relay each candidate's source rights from that subject's sources. For evidence calculations only: FactLot does not represent property owners, file protests, or advise whether to protest. Not an appraisal or an opinion of value (Tex. Occ. Code §1103.003(1)); not legal or tax advice and not a substitute for the advice of an attorney. Never returns owner names, mailing addresses, or ownership facts; do not look up the owners of candidate parcels. On the hosted API each answered subject counts as one registry lookup (a subject with an error is not counted). Requires a FactLot Registry (public-record facts about commercial property, each cited to the source file and record).

输入参数limitsubjects必填tax_yeararea_bandyear_bandmin_matches

fetch

Fetch a FactLot knowledge document

Fetch the full text of a FactLot knowledge document by the id returned from search. With a registry loaded, a registry fact's source document_id (fl:document:sha256-…) returns that source snapshot: publisher, dataset, URL, retrieval date, as-of date, licence, AI-use and redistribution rights, file name and size.

输入参数id必填

schema_get

FactLot JSON Schemas

Return the FactLot data model (Fact, Provenance, SourceRef, Rights, Relationship) as JSON Schema.

无需输入参数。

版本历史

5
  1. v0.5.0最新Nov 7, 2026
  2. v0.3.0Nov 4, 2026
  3. v0.2.0Nov 4, 2026
  4. v0.1.1Nov 3, 2026
  5. v0.1.0Nov 3, 2026

评分

已满足适用检查项的 100%

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

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