Fabrica test properties on Sepolia: try every Fabrica tool with no real-world effect.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Prepare accepting an open offer (orderHash: orderId from get_land_order_book) on a property the wallet holds (Sepolia Testnet). Checks first that the offer is open and the wallet holds the token, and warns when it expires within a day, is far from Fabrica's estimate, or the property is collateral for a loan. Signing sells the property. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
The wallet that will sign (0x address). The sign page only lets this wallet sign.
The order's hash: orderId in get_land_order_book
Property slug from the URL
The token ID of the property
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 25, 2026.
Prepare accepting an open offer (orderHash: orderId from get_land_order_book) on a property the wallet holds (Sepolia Testnet). Checks first that the offer is open and the wallet holds the token, and warns when it expires within a day, is far from Fabrica's estimate, or the property is collateral for a loan. Signing sells the property. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| orderHash* | string | The order's hash: orderId in get_land_order_book |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"orderHash",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"orderHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "The order's hash: orderId in get_land_order_book"
}
}
}Answer questions about how Fabrica works from Fabrica's own published documents: docs.fabrica.land, the help center and the US trust agreement. Returns the best matching passages with their URLs, so an answer can be cited. Covers the trust structure, fees, Property checks, lending, property taxes, adding and removing a property, the legal framework, the glossary and the MCP server itself. When the question names a specific property, wallet or listing, the result also suggests which lookup tool to call. Retrieval is lexical over a committed index, with no external call.
| Argument | Type | Description |
|---|---|---|
| source | string | Restrict to one source: 'docs', 'help' (help center), 'trust-agreement', or 'all' (default) |
| question* | string | The question in plain language, e.g. 'Who is the trustee of the trust that holds my property?' |
| maxPassages | integer | How many passages to return (1-10, default 5) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question"
],
"properties": {
"source": {
"enum": [
"docs",
"help",
"trust-agreement",
"all"
],
"type": "string",
"description": "Restrict to one source: 'docs', 'help' (help center), 'trust-agreement', or 'all' (default)"
},
"question": {
"type": "string",
"maxLength": 1000,
"minLength": 3,
"description": "The question in plain language, e.g. 'Who is the trustee of the trust that holds my property?'"
},
"maxPassages": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many passages to return (1-10, default 5)"
}
}
}Prepare borrowing USDC from the DeFi lending pool against a property the wallet holds (Sepolia Testnet), for amountUsd over durationDays (the pool's offered length closest to it, default about 30 days). Checks first that the wallet holds the token, the property backs no active loan, the pool lends against it and the amount is within the pool's current maximum (estimate_land_borrowing shows it). The rate and repayment come from the pool's live quote on the sign page. This is a test loan on Sepolia with no real-world effect. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| amountUsd* | number | Principal to borrow in US dollars, paid in USDC; at most what estimate_land_borrowing shows as maxBorrow |
| durationDays | integer | Loan length in days. The sign page uses the pool's offered length closest to it (default: the one closest to 30 days) |
Prepare buying a property at its open listing (orderHash: orderId from get_land_order_book) on Sepolia Testnet. Checks first that the listing is open, buyable (a listing on a property under a loan may not be yet), not the wallet's own and not reserved for other buyers, and lists the seller's disclosure documents. Signing sends an onchain transaction from the person's wallet; get_transaction_status follows it. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| orderHash* | string | The order's hash: orderId in get_land_order_book |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"orderHash",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"orderHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "The order's hash: orderId in get_land_order_book"
}
}
}Prepare canceling the wallet's own open listing or offer (orderHash: orderId from get_land_order_book) on Sepolia Testnet. Checks first that the listing or offer is open and the wallet made it. Canceling is a confirmation on the sign page, with no transaction. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| orderHash* | string | The order's hash: orderId in get_land_order_book |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"orderHash",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"orderHash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "The order's hash: orderId in get_land_order_book"
}
}
}Whether a US county (or a whole state) can be added to Fabrica online: supported, notConfigured or unsupported, and for a supported county the deed and forms the owner signs (and which are notarized), witness requirements, the questions the owner is asked, and the steps to add a property. Answers from a table of Fabrica's rules for adding property as of 2026-10-16, refreshed by hand, so each answer carries that date; the add-property page on fabrica.land is the live answer. Give a 5-digit county FIPS, or a two-letter state with or without a county. No fee amounts (ask_fabrica has them) and no owner data.
| Argument | Type | Description |
|---|---|---|
| fips | string | 5-digit county FIPS code, e.g. '06065' |
| state | string | Two-letter US state code, e.g. 'CA' |
| county | string | County name, e.g. 'Riverside' (with state) |
| ownerType | string | Who holds title today: individual (default), entity or concurrent (co-owners) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"fips": {
"type": "string",
"pattern": "^[0-9]{5}$",
"description": "5-digit county FIPS code, e.g. '06065'"
},
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter US state code, e.g. 'CA'"
},
"county": {
"type": "string",
"maxLength": 80,
"description": "County name, e.g. 'Riverside' (with state)"
},
"ownerType": {
"enum": [
"individual",
"entity",
"concurrent"
],
"type": "string",
"description": "Who holds title today: individual (default), entity or concurrent (co-owners)"
}
}
}Hand a question to Fabrica's support team when the documents (ask_fabrica) do not answer it or a person is needed: adding a property that is stuck, a document question, a dispute. Returns the help center section for the topic, the support email address, and a mailto link that drafts an email with the summary and the property link (the same fabrica.land page the other tools link). subject sets the subject in the person's words; a line saying an AI agent drafted it is added unless discloseAgent is false. Nothing is sent by this tool; the person sends the email and replies come back by email. Summaries containing a private key or seed phrase are refused.
| Argument | Type | Description |
|---|---|---|
| topic | string | Help center section: getting_started, adding_property, buying_selling, borrowing_lending, trust_legal, troubleshooting, other (default) |
| subject | string | Email subject, in the person's words (default: the topic, plus the token ID when given) |
| summary* | string | What the person is trying to do, what happened, and what was already checked |
| tokenId | string | Token ID of the property the question is about (digits only) |
| discloseAgent | boolean | Add a line saying the email was drafted by an AI agent through the Fabrica MCP server (default: true) |
Estimate how much can be borrowed against a property on Fabrica: DeFi lending pool liquidity (max loan amount, durations), existing loan status, the reasons when the pool shows no capacity (tax status, price oracle checks), and in limits what binds the amount (limitedBy: pool_liquidity, ltv, pool_limit, tax_status, oracle, existing_loan or unknown) with the collateral price, the pool's free liquidity and the highest loan-to-value. The oracle block shows how the collateral price is derived from the valuation sources. toRaise lists what would raise the amount, one entry per lever (setup, tax_status, deed_check, fees, existing_loan, price, ltv, pool_liquidity), each with where it stands today, what the pool would allow once it moves (wouldAllow, USD where computable) and the step or mechanism that moves it; pass amountUsd to test a loan amount. Answers questions such as 'How much can I borrow against this property?'. The amount is an estimate; the rate is set by a live quote when borrowing.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| tokenId | string | The token ID of the property |
| amountUsd | number | A loan amount in USD to test: toRaise then says what collateral price the pool's highest loan-to-value needs for it, and how much more pool liquidity it needs |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"amountUsd": {
"type": "number",
"description": "A loan amount in USD to test: toRaise then says what collateral price the pool's highest loan-to-value needs for it, and how much more pool liquidity it needs",
"exclusiveMinimum": 0
}
}
}Explain a Fabrica property's Property checks from their numeric encoding (formerly called the confidence score). The encoding is a 5-digit positional number where each digit represents a different verification group: recovery status (ten-thousands), past title (thousands), ownership (hundreds), onchain history (tens), basic validation (ones). Each digit is a category value, not a count; with a tokenId the response also counts the individual checks that pass. Max: 75342. Property checks are a starting point for your own research, not a title search or title insurance.
| Argument | Type | Description |
|---|---|---|
| score | integer | The 5-digit Property checks number to explain, as an integer (e.g. 73242) |
| tokenId | string | Look up and explain the Property checks of this property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"score": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "The 5-digit Property checks number to explain, as an integer (e.g. 73242)"
},
"tokenId": {
"type": "string",
"description": "Look up and explain the Property checks of this property"
}
}
}Look up any US land parcel by street address or parcel number (APN): address, place, APN, state and county, and whether it is already on Fabrica (token ID and property link). For a parcel not on Fabrica, links.addToFabrica is the fabrica.land link to add that parcel; it starts adding it only when a person opens it and decides there. The tool itself creates nothing. An ambiguous query returns up to 5 candidates, whose Fabrica status is matched by parcel number only; state and county narrow it to one, which gets the full check. When the US parcel search is not answering, properties already on Fabrica that the query names come back from Fabrica's own records as unconfirmed candidates (match: unconfirmed, matchSource: fabrica-index); present them as likely, not confirmed. Owner names from parcel data are never returned. For a list, queries takes up to 10 addresses or parcel numbers under one state and county scope and returns one row per resolved query (onFabrica, tokenId or addToFabrica, coverage) plus an unresolved list with the reason. Limited to 30 lookups per minute per client; each query in a list counts as one.
| Argument | Type | Description |
|---|---|---|
| query | string | Street address (with city and state when known) or parcel number (APN). Give this or queries, not both |
| state | string | Two-letter US state code, e.g. 'AZ' |
| county | string | County name, e.g. 'Navajo' |
| queries | array | Up to 10 addresses or parcel numbers sharing the same state and county scope; each counts as one lookup against the per-client limit. Returns one row per resolved query and an unresolved list with the reason |
Get an overview of the Fabrica lending market: loan counts, loans, DeFi lending pool liquidity and utilization, average APR, and recent loan events (the distribution of the whole history, by loan-to-value, state and outcome, is in get_fabrica_loan_book). Owners borrow against their properties through the DeFi lending pool (pool-based lending). Loan records also include historical peer-to-peer loans made through a former integration that is now retired.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max loan results (default 20, max 100) |
| since | string | ISO date. Only return loans started after this date. |
| lender | string | Filter by lender wallet address |
| status | string | Filter loans by status (default: 'all') |
| borrower | string | Filter by borrower wallet address |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max loan results (default 20, max 100)"
},
"since": {
"type": "string",
"description": "ISO date. Only return loans started after this date."
},
"lender": {
"type": "string",
"description": "Filter by lender wallet address"
},
"status": {
"enum": [
"active",
"repaid",
"liquidated",
"all"
],
"type": "string",
"description": "Filter loans by status (default: 'all')"
},
"borrower": {
"type": "string",
"description": "Filter by borrower wallet address"
}
}
}Get the lending history of the Fabrica protocol as a distribution: loan counts and principal by status and provider, loan-to-value bands against today's property estimates, exposure by state and acreage, APR and duration spread, repaid and liquidated counts, originations by month for the last 12 months, and the largest loans with their property pages. Covers DeFi lending pool loans and historical peer-to-peer loans. Counts come from the loan records; where the pool data source's counters differ, both are shown.
| Argument | Type | Description |
|---|---|---|
| status | string | Only loans with this status (default all). |
| groupBy | string | Adds a groups table: loans, principal and outcome counts per state, provider, status, loan-to-value band or acre band. |
| largest | integer | How many of the largest loans to list (default 10, max 25). |
| provider | string | pool: the DeFi lending pool. peer-to-peer: historical loans through the retired NFTfi integration. Default all. |
| sinceDays | integer | Only loans started in the last N days (default: the whole history). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"active",
"repaid",
"liquidated",
"all"
],
"type": "string",
"description": "Only loans with this status (default all)."
},
"groupBy": {
"enum": [
"state",
"provider",
"status",
"ltvBand",
"acreBand"
],
"type": "string",
"description": "Adds a groups table: loans, principal and outcome counts per state, provider, status, loan-to-value band or acre band."
},
"largest": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "How many of the largest loans to list (default 10, max 25)."
},
"provider": {
"enum": [
"pool",
"peer-to-peer",
"all"
],
"type": "string",
"description": "pool: the DeFi lending pool. peer-to-peer: historical loans through the retired NFTfi integration. Default all."
},
"sinceDays": {
"type": "integer",
"maximum": 3650,
"minimum": 1,
"description": "Only loans started in the last N days (default: the whole history)."
}
}
}Get network-wide statistics for Fabrica, where US land is held in trusts represented by tokens: total properties, estimated value, lending volume and loan counts, DeFi lending pool TVL and utilization, geographic distribution, and contract addresses.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the activity feed for a property or wallet, or, with no tokenId, slug or address, the most recent activity across every property on the network: properties added, transfers, sales, listings, loans started, repaid or liquidated, configuration changes, and more. Covers transaction history and event timelines.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug (for property activity) |
| type | string | Filter by activity type, matched against the API's event names (e.g. 'loan', 'transfer', 'sale', 'mint' for properties added) |
| limit | integer | Max results (default 20, max 100) |
| address | string | Wallet address (for wallet activity) |
| tokenId | string | Property token ID (for property activity). Leave tokenId, slug and address out for the recent activity across every property on the network. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug (for property activity)"
},
"type": {
"type": "string",
"description": "Filter by activity type, matched against the API's event names (e.g. 'loan', 'transfer', 'sale', 'mint' for properties added)"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max results (default 20, max 100)"
},
"address": {
"type": "string",
"description": "Wallet address (for wallet activity)"
},
"tokenId": {
"type": "string",
"description": "Property token ID (for property activity). Leave tokenId, slug and address out for the recent activity across every property on the network."
}
}
}Get the parcel boundary of a property on Fabrica as GeoJSON, for mapping, spatial analysis, and visualization. The county boundary is added only with includeCountyBounds: true.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| tokenId | string | The token ID of the property |
| includeCountyBounds | boolean | Also return the county boundary polygon, a large decorative layer (default: false) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"includeCountyBounds": {
"type": "boolean",
"description": "Also return the county boundary polygon, a large decorative layer (default: false)"
}
}
}Get one loan against a property on Fabrica: status (active, repaid, liquidated), provider, principal, APR, start, maturity, the full repayment and, for an active loan, the payoff today, with the borrower and lender wallets shortened and the property link. Give a property (tokenId or slug) for its active or latest loan, add loanId for a specific one, or give loanId alone to look it up across the network. otherLoans lists the property's other loans.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| loanId | string | The loan id; with no property, the loan is looked up across the network |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"loanId": {
"type": "string",
"pattern": "^[0-9]{1,100}$",
"description": "The loan id; with no property, the loan is looked up across the network"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Get a static map image of a property on Fabrica showing its parcel boundary (or a pin marker if no boundary is available). Returns an inline image. Supports dark/light themes and custom dimensions.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| theme | string | Map theme (default: 'dark') |
| width | integer | Image width in pixels (100-1280, default 640) |
| height | integer | Image height in pixels (100-1280, default 640) |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"theme": {
"enum": [
"dark",
"light"
],
"type": "string",
"description": "Map theme (default: 'dark')"
},
"width": {
"type": "integer",
"maximum": 1280,
"minimum": 100,
"description": "Image width in pixels (100-1280, default 640)"
},
"height": {
"type": "integer",
"maximum": 1280,
"minimum": 100,
"description": "Image height in pixels (100-1280, default 640)"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Get the listings and offers on one property on Fabrica: the lowest active listing, all listings, and offers sorted from highest to lowest, each with price in USD and in its currency, seller or buyer, expiry (ISO 8601 and relative), any buyer restriction and disclosure documents. Shows whether the property is still being added to Fabrica and whether it is collateral for an active loan, with what that means for a sale. Expired, canceled and filled listings and offers are left out unless status is 'all'. Links to the property page, where offers are made.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| status | string | 'active' (default): live orders only. 'all': also expired, canceled and filled orders. |
| tokenId | string | The token ID of the property |
| minOfferUsd | number | Only return offers at or above this USD amount |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"status": {
"enum": [
"active",
"all"
],
"type": "string",
"description": "'active' (default): live orders only. 'all': also expired, canceled and filled orders."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"minOfferUsd": {
"type": "number",
"minimum": 0,
"description": "Only return offers at or above this USD amount"
}
}
}Get a wallet's land portfolio on Fabrica: properties owned (paged), active loans (as borrower or lender), listings and offers, credit history, and total portfolio value. Counts and totals always cover the whole wallet.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max properties to list (default 50, max 200) |
| offset | integer | Properties to skip, for paging (propertiesPage.nextOffset) |
| address* | string | Ethereum wallet address (0x...) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"address"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max properties to list (default 50, max 200)"
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Properties to skip, for paging (propertiesPage.nextOffset)"
},
"address": {
"type": "string",
"description": "Ethereum wallet address (0x...)"
}
}
}Get a static map image showing all properties a wallet owns on Fabrica, plotted as points on a single map. Returns an inline image. Supports dark/light themes and custom dimensions.
| Argument | Type | Description |
|---|---|---|
| theme | string | Map theme (default: 'dark') |
| width | integer | Image width in pixels (100-1280, default 640) |
| height | integer | Image height in pixels (100-1280, default 640) |
| address* | string | Ethereum wallet address (0x...) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"address"
],
"properties": {
"theme": {
"enum": [
"dark",
"light"
],
"type": "string",
"description": "Map theme (default: 'dark')"
},
"width": {
"type": "integer",
"maximum": 1280,
"minimum": 100,
"description": "Image width in pixels (100-1280, default 640)"
},
"height": {
"type": "integer",
"maximum": 1280,
"minimum": 100,
"description": "Image height in pixels (100-1280, default 640)"
},
"address": {
"type": "string",
"description": "Ethereum wallet address (0x...)"
}
}
}Get the full record of one property on Fabrica (Sepolia Testnet), including legal description, valuation, property tax status, Property checks (with their 5-digit numeric encoding), current ownership and holders, active loans, marketplace listings and offers, recent activity, photos and a parcel map image link. Also its lifecycle stage (unclaimed, being added, replaced, live, removal in progress, removed, retired), fees assessed on the token with approval and payment state (fees is null when none are assessed), and flags for a duplicate parcel claim or the marketplace screen (an empty list when none apply). A token ID that was replaced when the property's token was issued returns that issued token. Boundary geometry is returned by get_land_boundary. Pass display: "fullscreen" to ask a host that renders the property card to open it fullscreen (the host may decline). Owner names: the majority holder's chosen display name is returned; the deed grantor from Fabrica's own records is in get_land_trust_documents; owner names from third-party parcel data are never returned.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| display | string | Hosts that render the property card: ask for it inline (default) or fullscreen. The host may decline. |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"display": {
"enum": [
"inline",
"fullscreen"
],
"type": "string",
"description": "Hosts that render the property card: ask for it inline (default) or fullscreen. The host may decline."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Get whether a property's taxes are current, past due or unknown, according to Fabrica's Property checks: the status, which signal it comes from (the Property Taxes Current check, the DeFi lending pool's block reason, both, or a note that they disagree), when it was checked and when the checks expire, and whether it limits borrowing. It is a data lookup, not the county's own statement; the amount due and the due date are not available.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Get the legal record of a tokenized property: the trust that holds it (holding entity, formation date), the trust agreement that governs the token (name, version, link), the legal description, the parcel identifiers (FIPS, APN, county, state), the recorded deed reference and grantor, and documents the owner uploaded. The agreement text is included only when includeAgreementText is true (it is long); trust.agreementResource is the MCP resource with this token's own agreement. Owner names: the deed grantor from Fabrica's own records is returned; a holder's chosen display name is in get_land_property; owner names from third-party parcel data are never returned. Property checks are not a title search or title insurance.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| tokenId | string | The token ID of the property |
| includeAgreementText | boolean | Also return the full text of the trust agreement, about 150 KB (default: false; the link is always returned) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"includeAgreementText": {
"type": "boolean",
"description": "Also return the full text of the trust agreement, about 150 KB (default: false; the link is always returned)"
}
}
}Get every value the Fabrica API holds for a property, each with its source, date and confidence: the estimate and the sources it comes from, the Fabrica AVM, Prycd and county assessor figures, the signed valuations the DeFi lending pool reads, the pool's oracle state (feed freshness, onchain price, usable price) with the reason when a price is missing, and the valuation report link. Presents data with its provenance; it suggests no price.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Get a sign request a prepare tool returned (make_land_offer, list_land_for_sale, accept_land_offer, buy_land, cancel_land_order, borrow_against_land, repay_land_loan) by its id: pending or completed, with the order hash, transaction hash or loan id once signed. A pending request is also checked against the live order book, or the property's loans for a borrow or payoff. Requests expire 15 minutes after they are prepared; an expired id is reported as unknown.
| Argument | Type | Description |
|---|---|---|
| id* | string | The sign request id (sr_...) a prepare tool returned |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The sign request id (sr_...) a prepare tool returned"
}
}
}Get the status of an Ethereum transaction on Sepolia Testnet by hash: not_found, pending, succeeded or failed, with the block, confirmations, sender, recipient and a block explorer link. Reads the chain only.
| Argument | Type | Description |
|---|---|---|
| hash* | string | The transaction hash (0x followed by 64 hex characters) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"hash"
],
"properties": {
"hash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "The transaction hash (0x followed by 64 hex characters)"
}
}
}Prepare a listing of a property the wallet holds on Fabrica (Sepolia Testnet) at a USD price paid in USDC, open for expiresDays (default 180). Checks first that the wallet holds the token, and warns when the price is far from Fabrica's estimate, when the wallet already lists it, when an offer is at or above the price, or when the property is collateral for a loan. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| priceUsd* | number | Asking price in US dollars, paid in USDC |
| expiresDays | integer | Days the listing stays open (default 180) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"priceUsd",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"priceUsd": {
"type": "number",
"maximum": 1000000000,
"minimum": 1,
"description": "Asking price in US dollars, paid in USDC"
},
"expiresDays": {
"type": "integer",
"maximum": 365,
"minimum": 1,
"description": "Days the listing stays open (default 180)"
}
}
}Prepare an offer to buy a live property on Fabrica (Sepolia Testnet) at a USD amount paid in USDC, open for expiresDays (default 14). Checks first that the property is live and the wallet does not already hold it, and warns when the amount is far from Fabrica's estimate, when a listing is at or below it, or when the property is collateral for a loan. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
| amountUsd* | number | Offer amount in US dollars, paid in USDC (one USDC counts as one dollar) |
| expiresDays | integer | Days the offer stays open (default 14) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amountUsd",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"amountUsd": {
"type": "number",
"maximum": 1000000000,
"minimum": 1,
"description": "Offer amount in US dollars, paid in USDC (one USDC counts as one dollar)"
},
"expiresDays": {
"type": "integer",
"maximum": 180,
"minimum": 1,
"description": "Days the offer stays open (default 14)"
}
}
}Prepare paying off the open DeFi lending pool loan on a property (Sepolia Testnet), or the one named by loanId, with the payoff amount today. A loan is open while active and, past maturity, in default until the pool's auction starts. Checks first that the loan is open and the wallet is its borrower, and warns when it is past maturity. Paying off returns the token to the wallet, free of the loan. Prepared, not sent: returns a signRequest (summary, warnings, signLink to fabrica.land, expiresAt 15 minutes out, payload null for now) and stores it so the sign page can load it. The person opens the link, signs in with that wallet and signs; nothing happens until then. The server holds no keys and submits nothing. wallet is the address that will sign.
| Argument | Type | Description |
|---|---|---|
| slug | string | Property slug from the URL |
| loanId | string | The loan to pay off (default: the property's open loan, active or in default) |
| wallet* | string | The wallet that will sign (0x address). The sign page only lets this wallet sign. |
| tokenId | string | The token ID of the property |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"loanId": {
"type": "string",
"pattern": "^[0-9]{1,100}$",
"description": "The loan to pay off (default: the property's open loan, active or in default)"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
}
}
}Search US land on Fabrica (Sepolia Testnet): land for sale and every other property on the network, mostly vacant lots and acreage. Returns a list of properties matching the given filters (location, size, Property checks, listing status, listing price and price per acre, distance from a point), sorted by price, price per acre, acres, estimated value, Property checks, date added or distance; each row carries its price per acre (listing or estimate, labeled) and, with near, its straight-line distance. Or counts per state or county with groupBy. When a state or county is given, the response includes the link to that location's page on fabrica.land. These are test properties on Sepolia with no real-world effect.
| Argument | Type | Description |
|---|---|---|
| near | object | A point to measure distance from, in decimal degrees. Each row then carries distanceMiles (straight-line), and the default sort is by distance. |
| limit | integer | Max results (default 20, max 100) |
| county | string | County name, case-insensitive, the 'County' suffix optional (e.g. 'Costilla' or 'Mohave County'). Combine with region when the name exists in more than one state. |
| offset | integer | Pagination offset |
| region | string | US state code (e.g. 'TX', 'CA', 'NV') |
| sortBy | string | Order of the rows. price and pricePerAcre use the listing price and put unlisted properties last; newest is by the date the property was added; distance needs near. Default: the API's order, or distance when near is set. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amountUsd",
"wallet"
],
"properties": {
"slug": {
"type": "string",
"description": "Property slug from the URL"
},
"wallet": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "The wallet that will sign (0x address). The sign page only lets this wallet sign."
},
"tokenId": {
"type": "string",
"description": "The token ID of the property"
},
"amountUsd": {
"type": "number",
"maximum": 100000000,
"minimum": 1,
"description": "Principal to borrow in US dollars, paid in USDC; at most what estimate_land_borrowing shows as maxBorrow"
},
"durationDays": {
"type": "integer",
"maximum": 3650,
"minimum": 1,
"description": "Loan length in days. The sign page uses the pool's offered length closest to it (default: the one closest to 30 days)"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"summary"
],
"properties": {
"topic": {
"enum": [
"getting_started",
"adding_property",
"buying_selling",
"borrowing_lending",
"trust_legal",
"troubleshooting",
"other"
],
"type": "string",
"description": "Help center section: getting_started, adding_property, buying_selling, borrowing_lending, trust_legal, troubleshooting, other (default)"
},
"subject": {
"type": "string",
"maxLength": 150,
"minLength": 3,
"description": "Email subject, in the person's words (default: the topic, plus the token ID when given)"
},
"summary": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "What the person is trying to do, what happened, and what was already checked"
},
"tokenId": {
"type": "string",
"pattern": "^[0-9]{1,80}$",
"description": "Token ID of the property the question is about (digits only)"
},
"discloseAgent": {
"type": "boolean",
"description": "Add a line saying the email was drafted by an AI agent through the Fabrica MCP server (default: true)"
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 3,
"description": "Street address (with city and state when known) or parcel number (APN). Give this or queries, not both"
},
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter US state code, e.g. 'AZ'"
},
"county": {
"type": "string",
"maxLength": 80,
"description": "County name, e.g. 'Navajo'"
},
"queries": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 3
},
"maxItems": 10,
"minItems": 1,
"description": "Up to 10 addresses or parcel numbers sharing the same state and county scope; each counts as one lookup against the per-client limit. Returns one row per resolved query and an unresolved list with the reason"
}
}
}| groupBy | string | Return one row per state or county (property count, count for sale, total acres, location page link) instead of property rows. limit and offset page through the groups. |
| ownedBy | string | Filter by owner wallet address |
| sortDir | string | asc (default) or desc. newest is always most recent first. |
| hasLoans | boolean | Only show properties with active loans |
| maxAcres | number | Maximum parcel size in acres |
| maxPrice | number | Maximum listing price in USD. Only listed properties match any price filter. |
| minAcres | number | Minimum parcel size in acres |
| minPrice | number | Minimum listing price in USD. Only listed properties match any price filter. |
| minScore | integer | Minimum Property checks number: the 5-digit numeric encoding of Property checks, an integer. Defaults to 72032, the marketplace threshold, except when ownedBy is set (then every property in that wallet is listed). Any minimum also requires a verified deed. Max: 75342. |
| hasListings | boolean | Only show properties with active sale listings |
| maxPricePerAcre | number | Maximum listing price per acre in USD (listing price over acres; unlisted properties never match). |
| minPricePerAcre | number | Minimum listing price per acre in USD (listing price over acres; unlisted properties never match). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"near": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"radiusMiles": {
"type": "number",
"maximum": 3000,
"description": "Keep only properties within this many miles of the point (default: no limit, every row gets its distance).",
"exclusiveMinimum": 0
}
},
"description": "A point to measure distance from, in decimal degrees. Each row then carries distanceMiles (straight-line), and the default sort is by distance."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Max results (default 20, max 100)"
},
"county": {
"type": "string",
"description": "County name, case-insensitive, the 'County' suffix optional (e.g. 'Costilla' or 'Mohave County'). Combine with region when the name exists in more than one state."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset"
},
"region": {
"type": "string",
"description": "US state code (e.g. 'TX', 'CA', 'NV')"
},
"sortBy": {
"enum": [
"price",
"pricePerAcre",
"acres",
"estimatedValue",
"score",
"newest",
"distance"
],
"type": "string",
"description": "Order of the rows. price and pricePerAcre use the listing price and put unlisted properties last; newest is by the date the property was added; distance needs near. Default: the API's order, or distance when near is set."
},
"groupBy": {
"enum": [
"state",
"county"
],
"type": "string",
"description": "Return one row per state or county (property count, count for sale, total acres, location page link) instead of property rows. limit and offset page through the groups."
},
"ownedBy": {
"type": "string",
"description": "Filter by owner wallet address"
},
"sortDir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "asc (default) or desc. newest is always most recent first."
},
"hasLoans": {
"type": "boolean",
"description": "Only show properties with active loans"
},
"maxAcres": {
"type": "number",
"minimum": 0,
"description": "Maximum parcel size in acres"
},
"maxPrice": {
"type": "number",
"minimum": 0,
"description": "Maximum listing price in USD. Only listed properties match any price filter."
},
"minAcres": {
"type": "number",
"minimum": 0,
"description": "Minimum parcel size in acres"
},
"minPrice": {
"type": "number",
"minimum": 0,
"description": "Minimum listing price in USD. Only listed properties match any price filter."
},
"minScore": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Minimum Property checks number: the 5-digit numeric encoding of Property checks, an integer. Defaults to 72032, the marketplace threshold, except when ownedBy is set (then every property in that wallet is listed). Any minimum also requires a verified deed. Max: 75342."
},
"hasListings": {
"type": "boolean",
"description": "Only show properties with active sale listings"
},
"maxPricePerAcre": {
"type": "number",
"minimum": 0,
"description": "Maximum listing price per acre in USD (listing price over acres; unlisted properties never match)."
},
"minPricePerAcre": {
"type": "number",
"minimum": 0,
"description": "Minimum listing price per acre in USD (listing price over acres; unlisted properties never match)."
}
}
}