land-intelligence

land-intelligence

Enables governed analytics and research on land development optionality, infrastructure proximity, and stewardship via MCP tools that provide transparent screening heuristics and reproducible evidence.

Category
访问服务器

README

Land Intelligence Research MCP

Can an AI research analyst reason about land without inventing the evidence?

Land Intelligence Research MCP is an independent research prototype exploring how governed analytics and Model Context Protocol (MCP) can support research on land development optionality.

The project is motivated by a broader research interest in land economics, energy and infrastructure development, and long-duration land stewardship. It asks:

How should landowners, investors, and developers reason about development optionality when a parcel has simultaneous economic, infrastructure, and environmental value?

The current implementation focuses on development optionality screening using a deterministic synthetic dataset. It combines parcel characteristics, infrastructure proximity, land-use constraints, and synthetic outcomes into a governed analytical layer that an LLM can access through MCP tools.

Research disclaimer: This repository uses synthetic data and transparent screening heuristics for research and demonstration purposes. Optionality scores are not appraisals, forecasts, causal estimates, probabilities of development, or investment recommendations.

Why this project

A common failure mode in AI analytics is allowing the language model to become the analytics engine: it reads raw files, writes ad hoc queries, silently changes definitions, and produces numbers that are difficult to govern or reproduce.

This project takes a different approach:

flowchart TD
    Q["Research question"] --> S["LLM selects an MCP tool"]
    subgraph DET["Deterministic system — Python + DuckDB (server.py)"]
        direction TB
        V["Validated structured arguments<br/>(MCP typed interface)"] --> D["Governed DuckDB query / scoring<br/>(PARCEL_FEATURE_SQL)"]
        D --> R["Structured JSON result"]
    end
    S --> V
    R --> I["LLM interprets the result for the user"]

    style DET fill:#eef3fb,stroke:#2a78d6,stroke-width:1px

Everything inside the shaded box is deterministic, governed, and identical across every conversation. Only tool selection, argument phrasing, and result interpretation are left to the LLM. See docs/ARCHITECTURE.md for the full diagram and docs/CODE_WALKTHROUGH.md for exactly where that boundary sits in code.

The LLM is responsible for reasoning. The analytical layer is responsible for quantitative evidence.

If the MCP does not expose evidence needed to answer a question, the desired behavior is to surface the analytical gap rather than bypass the system or invent a result.

Research lenses

The same governed evidence can support different decisions depending on the stakeholder.

Institutional landowner / TIMO-style owner

A long-duration owner may ask which assets have meaningful development optionality, whether optionality is broad or concentrated, and which assets warrant strategic diligence before a hold, sale, lease, entitlement, or development-partnership decision.

Investor / capital allocator

An investor may ask where diligence or capital should be deployed, whether optionality is already reflected in current-use value, and what underwriting evidence is still missing.

Developer

A developer may ask which parcels deserve deeper feasibility work and whether favorable infrastructure-proximity signals survive parcel-level physical constraints.

MCP analytical surface

The server exposes five governed tools. All four data-bearing tools call the same underlying parcel_scores() function, so there is exactly one definition of optionality_signal behind every one of them:

Tool Inputs Analytical operation Output
list_research_questions none returns a static, hand-maintained list supported research questions + scope note
compare_counties limit groups parcel_scores() by county; average signal, count of parcels scoring ≥60 per-county screening summary
rank_land_optionality limit, optional county_name sorts parcel_scores() descending, optionally filtered to one county top-N parcels with score + feature columns
explain_parcel_score parcel_id looks up one row of parcel_scores() that parcel's score, positive features, and constraints
evaluate_optionality_signal none joins parcel_scores() to development_outcomes, buckets into deciles with NTILE(10) decile table + top-vs-bottom conversion-rate lift

See docs/CODE_WALKTHROUGH.md for the full per-tool detail, including limitations of each.

It also exposes:

  • Resource: research://catalog
  • Prompt: land_research_investigation

Data model

The project ships with six deterministic synthetic relational tables:

counties
   |
   +----< parcels ----< transactions
   |         |
   |         +---- parcel_infrastructure ----> infrastructure
   |         |
   |         +---- development_outcomes
   |
   +----< infrastructure

The synthetic fixture is reproducible with seed 42. A manifest and SHA256 checksums are included.

Optionality signal

The optionality score is a transparent screening heuristic that incorporates signals such as parcel acreage, zoning, slope, flood risk, wetland share, and proximity to substations, transmission, fiber, highways, and data-center infrastructure.

The score is intentionally not framed as a valuation or predictive probability.

Distribution of optionality_signal across all 3,200 synthetic parcels, with mean and median reference lines

Each parcel's score is a weighted decomposition of ten features — see the formula decomposition for a representative parcel and the county-level comparison in docs/CODE_WALKTHROUGH.md for the full breakdowns.

The evaluate_optionality_signal tool checks whether the score separates synthetic development outcomes by score decile. This is useful for testing the research workflow, but it is not evidence of real-world predictive validity.

Two-panel decile validation: left panel shows average optionality_signal by decile (deterministic formula output), right panel shows observed_conversion_5yr rate by decile (independent synthetic DGP output)

The two panels above are deliberately plotted separately, not on a shared or dual axis: optionality_signal (left) and observed_conversion_5yr (right) come from two independent formulas — one deterministic, one a stochastic draw from a separate synthetic data-generating process — and the chart is not meant to imply they are the same quantity. See why this isn't circular validation in docs/CODE_WALKTHROUGH.md.

Local setup

Recommended prerequisites:

  • Python 3.11+
  • uv
  • Claude Code if you want to test the LLM + MCP workflow

From the repository root:

python3.11 scripts/preflight.py

Then launch MCP development mode:

./scripts/run_mcp_dev.sh

Register with Claude Code:

./scripts/register_claude.sh

Then:

claude

Inside Claude:

/mcp

Approve land-intelligence if prompted.

Example agent prompt

Act as a research analyst supporting a long-duration institutional landowner.

Use the land-intelligence MCP as your only quantitative data and analytics interface. Do not inspect the underlying CSVs, database, SQL, Python files, manifests, or other repository artifacts directly.

Determine which markets and parcels appear to have the strongest development optionality, what evidence supports that conclusion, and what evidence should make the investment team cautious.

Every material numerical claim should come from an MCP tool result. If an important question cannot be answered through the current MCP analytical surface, identify the gap rather than bypassing the MCP or guessing.

See PROMPTS.md for additional investor, developer, red-team, and cross-stakeholder prompts.

Broader research direction

The current implementation focuses on development optionality and infrastructure/land constraints.

Future research could extend into power-market and interconnection data, zoning and entitlement histories, development comps, lease and option structures, conservation easements, habitat quality and fragmentation, biodiversity constraints, carbon and natural-capital economics, water availability, NPV / IRR scenarios, and spatial portfolio optimization.

Habitat preservation is part of the broader research motivation, but the current synthetic model should not be interpreted as a habitat-quality model.

Independence and attribution

This is an independent research project. It was informed by public research into institutional land ownership and firms working at the intersection of land, infrastructure, energy, and long-duration asset management.

It is not affiliated with, endorsed by, or representative of any specific company, investment manager, developer, landowner, or data provider. All included datasets and outcomes are synthetic.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选