Koskamo

Worth Sheet MCP

An MCP server that allows AI assistants to value apartment buildings using rent rolls and expenses, determine loan-supported prices at current 10-year Treasury rates, and analyze rate sensitivity. It provides tools for valuation, rate sensitivity analysis, and retrieving current Treasury yields and loan limits.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Worth Sheet MCP logo, by Janover Capital LLCVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Janover Capital LLC
MCP endpoint (Streamable HTTP)
https://multifamily.forsale/mcp
Vendor documentation

What you can do with it

  • Value an apartment building from its rent roll and expenses
  • Determine the price a financed buyer can pay at today's rates
  • Analyze how rate changes affect loan-supported prices
  • Retrieve current Treasury yields and Fannie Mae/Freddie Mac loan limits

Source and maintenance

Vendor evidenceRegistry 1.2026.1101.1

Protocol and capabilities

Server
multifamily-forsale 1.0.0
MCP protocol
2025-06-18
Tools
3 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Worth Sheet (multifamily.forsale) runs the site's valuation worksheet for owners of 5+ unit apartment buildings: value across the owner's cap rate range, the price a financed buyer can carry at the 10-year Treasury plus a lender spread, and the refinance loan the income supports. The 10-year Treasury comes from the U.S. Treasury daily par yield curve, read from the site's daily feed (with its as-of date) and falling back to the site's data file. Loan limits default to 80% LTV and 1.25x DSCR from the Fannie Mae and Freddie Mac conventional term sheets. Cap rates and the lender spread are the user's inputs: no government source publishes cap rates, and the 1.75 default spread is a placeholder, not a quote. Results are estimates from the numbers given: not an appraisal, and not an offer to buy or to lend. Cite the Treasury source and the multifamily.forsale page that comes back with each answer. The site is published by Janover Capital LLC and is not affiliated with the U.S. Treasury, Fannie Mae or Freddie Mac. Formulas and sources: https://multifamily.forsale/method/

Tools

3 advertised

value_at_rate — Value an apartment building at today's loan rates
Advertised by the server during the last successful anonymous check.
Advertised read-only

Runs the Worth Sheet valuation worksheet for a 5+ unit apartment building: from a rent roll and a year of expenses (or a known NOI) it returns NOI, expense ratio, value across your cap rate range, the price a financed buyer can carry at the latest 10-year Treasury plus a lender spread (80% LTV, 1.25x DSCR by default), per-unit value, and the refinance loan the income supports against your balance. An estimate from your numbers, not an appraisal.

value_at_rate input schema
{
  "type": "object",
  "required": [
    "cap_rate_low_pct",
    "cap_rate_high_pct"
  ],
  "properties": {
    "dscr": {
      "type": "number",
      "default": 1.25,
      "maximum": 3,
      "minimum": 1,
      "description": "Min debt service coverage, times. Default 1.25 (both agencies' term sheets)."
    },
    "units": {
      "type": "integer",
      "maximum": 5000,
      "minimum": 1,
      "description": "Number of units, for per-unit value when you give noi_annual."
    },
    "ltv_pct": {
      "type": "number",
      "default": 80,
      "maximum": 100,
      "minimum": 1,
      "description": "Max loan-to-value, percent. Default 80 (Fannie Mae and Freddie Mac conventional term sheets)."
    },
    "unit_mix": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "units",
          "monthly_rent"
        ],
        "properties": {
          "label": {
            "type": "string",
            "maxLength": 40,
            "description": "Optional name, e.g. \"2 bedroom\"."
          },
          "units": {
            "type": "integer",
            "maximum": 5000,
            "minimum": 0
          },
          "monthly_rent": {
            "type": "number",
            "maximum": 100000,
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "maxItems": 10,
      "minItems": 1,
      "description": "Rent roll by unit type, e.g. [{\"units\":12,\"monthly_rent\":1250},{\"units\":16,\"monthly_rent\":1500}]. Give this or noi_annual."
    },
    "tax_reset": {
      "type": "boolean",
      "default": false,
      "description": "True if a sale resets the property tax bill to a share of the price; value is then solved with taxes at tax_rate_pct of price."
    },
    "noi_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Net operating income per year in US dollars, if you already know it. Give this or unit_mix (not both)."
    },
    "spread_pct": {
      "type": "number",
      "default": 1.75,
      "maximum": 10,
      "minimum": 0,
      "description": "Lender spread over the 10-year, percent. Default 1.75, the worksheet's placeholder (not a quote)."
    },
    "vacancy_pct": {
      "type": "number",
      "default": 5,
      "maximum": 95,
      "minimum": 0,
      "description": "Vacancy and bad debt, percent of gross. Default 5."
    },
    "loan_balance": {
      "type": "number",
      "maximum": 5000000000,
      "minimum": 0,
      "description": "Your current loan balance, US dollars, to compare against the refinance loan. Optional."
    },
    "tax_rate_pct": {
      "type": "number",
      "default": 1.5,
      "maximum": 10,
      "minimum": 0,
      "description": "Tax rate on the new value, percent of price (county millage as a percent). Default 1.5. Used only when tax_reset is true."
    },
    "management_pct": {
      "type": "number",
      "default": 5,
      "maximum": 30,
      "minimum": 0,
      "description": "Management, percent of collected income; charge it even if self-managed. Default 5."
    },
    "payroll_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Payroll per year, US dollars. Default 0."
    },
    "cap_rate_low_pct": {
      "type": "number",
      "maximum": 20,
      "minimum": 1,
      "description": "Low end of the cap rate range brokers quote for similar buildings, percent, e.g. 5.5. No government source publishes cap rates."
    },
    "insurance_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Insurance per year, US dollars. Default 0."
    },
    "utilities_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Owner-paid utilities per year, US dollars. Default 0."
    },
    "cap_rate_high_pct": {
      "type": "number",
      "maximum": 20,
      "minimum": 1,
      "description": "High end of the cap rate range, percent, e.g. 7."
    },
    "reserves_per_unit": {
      "type": "number",
      "maximum": 10000,
      "minimum": 0,
      "description": "Replacement reserves per unit per year, US dollars. Default 300."
    },
    "treasury_10yr_pct": {
      "type": "number",
      "maximum": 20,
      "minimum": 0,
      "description": "10-year Treasury yield to use, percent. Default: the latest daily par yield the site has (U.S. Treasury)."
    },
    "admin_other_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Admin, legal and other expenses per year, US dollars. Put any lump-sum expense total (excluding property taxes) here. Default 0."
    },
    "amortization_years": {
      "type": "integer",
      "default": 30,
      "maximum": 40,
      "minimum": 5,
      "description": "Amortization in years. Default 30."
    },
    "other_income_monthly": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Other income per month (laundry, parking, fees), US dollars. Default 0."
    },
    "property_taxes_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Property taxes per year, US dollars. Default 0. With noi_annual, needed only for tax_reset."
    },
    "repairs_maintenance_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Repairs, maintenance and turnover per year, US dollars. Default 0."
    }
  },
  "additionalProperties": false
}
value_at_rate annotations
{
  "title": "Value an apartment building at today's loan rates",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
rate_sensitivity — How loan rates move what a buyer can pay
Advertised by the server during the last successful anonymous check.
Advertised read-only

For an apartment building's net operating income, the price a financed buyer can carry and the income-limited loan size at a ladder of 10-year Treasury levels around today's (default -100 to +100 bp), at 80% LTV and 1.25x DSCR by default. Answers "what is my building worth to a buyer if rates drop half a point?".

rate_sensitivity input schema
{
  "type": "object",
  "required": [
    "noi_annual"
  ],
  "properties": {
    "dscr": {
      "type": "number",
      "default": 1.25,
      "maximum": 3,
      "minimum": 1,
      "description": "Min debt service coverage, times. Default 1.25 (both agencies' term sheets)."
    },
    "ltv_pct": {
      "type": "number",
      "default": 80,
      "maximum": 100,
      "minimum": 1,
      "description": "Max loan-to-value, percent. Default 80 (Fannie Mae and Freddie Mac conventional term sheets)."
    },
    "shifts_bp": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 300,
        "minimum": -300
      },
      "maxItems": 13,
      "minItems": 1,
      "description": "Moves in the 10-year to test, in basis points. Default [-100,-50,-25,0,25,50,100]."
    },
    "tax_reset": {
      "type": "boolean",
      "default": false,
      "description": "True if a sale resets the property tax bill to a share of the price; value is then solved with taxes at tax_rate_pct of price."
    },
    "noi_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Net operating income per year in US dollars, e.g. 300000."
    },
    "spread_pct": {
      "type": "number",
      "default": 1.75,
      "maximum": 10,
      "minimum": 0,
      "description": "Lender spread over the 10-year, percent. Default 1.75, the worksheet's placeholder (not a quote)."
    },
    "tax_rate_pct": {
      "type": "number",
      "default": 1.5,
      "maximum": 10,
      "minimum": 0,
      "description": "Tax rate on the new value, percent of price (county millage as a percent). Default 1.5. Used only when tax_reset is true."
    },
    "treasury_10yr_pct": {
      "type": "number",
      "maximum": 20,
      "minimum": 0,
      "description": "10-year Treasury yield to use, percent. Default: the latest daily par yield the site has (U.S. Treasury)."
    },
    "amortization_years": {
      "type": "integer",
      "default": 30,
      "maximum": 40,
      "minimum": 5,
      "description": "Amortization in years. Default 30."
    },
    "property_taxes_annual": {
      "type": "number",
      "maximum": 1000000000,
      "minimum": 0,
      "description": "Current property taxes inside that NOI, US dollars. Needed only with tax_reset."
    }
  },
  "additionalProperties": false
}
rate_sensitivity annotations
{
  "title": "How loan rates move what a buyer can pay",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_rates_and_loan_limits — Today's Treasury yields and agency loan limits
Advertised by the server during the last successful anonymous check.
Advertised read-only

The latest 5-, 7- and 10-year Treasury par yields and overnight SOFR the site has, each with its as-of date, the readings a week and a month earlier when the daily feed has them, and publisher link; plus the loan limits the worksheet uses (80% max LTV, 1.25x min DSCR from the Fannie Mae and Freddie Mac term sheets) and the spread note.

get_rates_and_loan_limits input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_rates_and_loan_limits annotations
{
  "title": "Today's Treasury yields and agency loan limits",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
425 ms
95th percentile latency
425 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 425 ms · metadata changed · 3 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http worth-sheet-mcp https://multifamily.forsale/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add worth-sheet-mcp --url https://multifamily.forsale/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable worth-sheet-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "worth-sheet-mcp": {
      "url": "https://multifamily.forsale/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "worth-sheet-mcp": {
      "type": "streamableHttp",
      "url": "https://multifamily.forsale/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start worth-sheet-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "worth-sheet-mcp": {
      "type": "http",
      "url": "https://multifamily.forsale/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http worth-sheet-mcp https://multifamily.forsale/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "worth-sheet-mcp": {
      "url": "https://multifamily.forsale/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "worth-sheet-mcp": {
      "serverUrl": "https://multifamily.forsale/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Worth Sheet MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Worth Sheet MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing