Fabrica test properties on Sepolia: try every Fabrica tool with no real-world effect.
One address for any MCP client. No sign-in needed on this server.
11 read
Grouped by tool name.
Odel charges nothing per call. The publisher may charge for its own service.
Give AI agents access to tokenized real property data. Search properties, analyze lending markets, and explore portfolios across tokenized parcels of US land on the Fabrica protocol.
Fabrica tokenizes real property (land) as ERC-1155 NFTs on Ethereum. This MCP server lets any AI agent query the full property catalog, lending market, and portfolio data, with no API keys required.
Built on the Model Context Protocol (MCP).
Point any MCP client at the hosted server:
| Network | URL |
|---|---|
| Ethereum Mainnet (real parcels) | https://mcp.fabrica.land/mcp |
| Sepolia Testnet (test properties) | https://mcp-testnet.fabrica.land/mcp |
Claude (claude.ai and desktop): Settings → Connectors → Add custom connector → paste the URL.
Claude Code:
claude mcp add --transport http fabrica https://mcp.fabrica.land/mcp
claude mcp add --transport http fabrica-testnet https://mcp-testnet.fabrica.land/mcp
Cursor (.cursor/mcp.json):
{
"mcpServers": {
"fabrica": { "url": "https://mcp.fabrica.land/mcp" }
}
}
Any other client that supports remote MCP servers (Streamable HTTP) works the same way. Add both URLs as two separate servers if you want to try things on testnet before mainnet: the network is fixed per URL, so an agent can never reach mainnet through the testnet server.
Clone and build:
git clone https://github.com/fabrica-land/fabrica-mcp.git
cd fabrica-mcp
npm install
npm run build
Then configure your MCP client to use the built server:
Claude Code:
claude mcp add fabrica -- node /absolute/path/to/fabrica-mcp/dist/index.js
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"fabrica": {
"command": "node",
"args": ["/absolute/path/to/fabrica-mcp/dist/index.js"]
}
}
}
Replace /absolute/path/to/fabrica-mcp with the actual path where you cloned the repo.
| Tool | Description |
|---|---|
search_properties | Search tokenized properties by location, size, Property checks, listing status |
get_property | Full property details: legal, valuation, ownership, loans, media |
get_lending_market | Lending overview: loan counts, loans, DeFi lending pool stats, average APR, events |
get_portfolio | Wallet holdings, credit history, loan positions |
get_protocol_stats | Protocol-wide metrics: properties, estimated value, loan volume and counts, lending pool TVL |
get_property_map | GeoJSON boundary data for mapping and spatial analysis |
get_borrow_quote | Borrowing options for a property: DeFi lending pool liquidity, durations, current loans |
get_activity | Activity feed for a property or wallet: transfers, loans, sales, mints |
explain_confidence_score | Decode the numeric encoding of Property checks (5 digits, formerly called the confidence score) into verification groups |
get_property_image | Static map image of a property's parcel boundary (inline, dark/light themes) |
get_portfolio_image | Map image showing all properties owned by a wallet (inline, dark/light themes) |
"Find me all tokenized properties in Texas"
"What's the current average APR on Fabrica's lending market? How much liquidity does the lending pool have?"
"Do a full due diligence report on property token 12743610130101631987"
"Show me the portfolio for wallet 0x23bc...fce4. What properties do they own?"
"Give me protocol-wide stats for Fabrica: how many properties, in which states, and total loan volume?"
"How much can I borrow against property token 12743610130101631987?"
"Show me all recent activity for wallet 0x23bc...fce4"
"Explain the Property checks number 73242. What does each digit mean?"
"Show me a map of property token 12743610130101631987"
"Show me a map of all properties in this wallet's portfolio"
In clients that support MCP Apps (such as Claude on the web and desktop), get_property renders a property card inline in the conversation:
Every button opens the property on Fabrica, where the user completes the action and signs; the server itself never prepares or submits a transaction. Clients without MCP Apps support receive the same data as JSON.
The card is on by default on Sepolia and off on mainnet unless FABRICA_MCP_APPS=enabled. Photos are limited to the origins the card's sandbox allows (see WIDGET_IMAGE_ORIGINS in src/tools/media.ts).
The hosted servers are split by URL (see Quick Start). A local server connects to Ethereum Mainnet by default, where properties represent real parcels of US land with real legal consequences. To experiment with test properties first, set FABRICA_NETWORK=sepolia:
Claude Code (Sepolia):
claude mcp add fabrica -e FABRICA_NETWORK=sepolia -- node /absolute/path/to/fabrica-mcp/dist/index.js
Claude Desktop (Sepolia):
{
"mcpServers": {
"fabrica": {
"command": "node",
"args": ["/absolute/path/to/fabrica-mcp/dist/index.js"],
"env": { "FABRICA_NETWORK": "sepolia" }
}
}
}
Mainnet notice: On mainnet, the server instructions carry a legal notice stated as facts: the properties are real US land, each held in a trust; owning a token means owning the beneficial interest in the trust that holds the property; the trustee is designated by the token holder and is, by default, the holder; and acquiring, transferring, listing or borrowing against a token has legal, tax and liability consequences set out in the trust agreement attached to it.
Sepolia: Test properties only, no real-world implications.
All optional; sensible defaults are built in:
| Variable | Default | Description |
|---|---|---|
FABRICA_NETWORK | ethereum | Network to operate on (ethereum or sepolia) |
FABRICA_API_URL | https://api.fabrica.land/graphql | Fabrica GraphQL API |
FABRICA_METASTREET_SUBGRAPH_URL | Auto-selected per network | Subgraph for the lending pool contracts (the variable keeps its original name) |
FABRICA_MEDIA_URL | https://media.fabrica.land | Fabrica media service for map images |
FABRICA_MCP_APPS | on for Sepolia, off for mainnet | enabled or disabled: the property card MCP App on get_property |
The hosted servers run on Vercel from this repository: one Vercel project per network, both built with npm run build:vercel (see vercel.json), which emits a single stateless Streamable HTTP function at /mcp and a landing page at /. Set FABRICA_NETWORK in each project's environment (ethereum or sepolia). The same handler (src/http.ts) can run behind any Node HTTP server.
MIT