platworks-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_componentsA | List ecosystem components, optionally filtered by category. Categories are a closed vocabulary; an unknown category is returned as a typed unknown_category refusal naming the valid categories. |
| get_componentA | Get one component by exact name, with its verified repo or an honest private marker. Unknown names are returned as a typed unknown_component refusal. Private components return public=False with no repo/description. |
| find_componentsA | Find all components in one category (closed vocabulary). A missing category is returned as a typed missing_argument refusal; an unknown category as unknown_category. (The argument is declared optional so the refusal reaches the client as a payload instead of a framework-level validation crash.) |
| list_categoriesA | List the closed category vocabulary with component counts. The order is stable and every category appears exactly once. |
| list_public_componentsA | List only public components that carry verified repository links. These are the repositories a user can actually clone today. |
| list_private_componentsA | List private components (names only — no repo, no description claims). Private entries make no public claims: no repo URL and no description, by design. |
| search_componentsA | Search components by substring across name, category, tags, and verified descriptions. Matching is case-insensitive. A missing query is returned as a typed missing_argument refusal; an empty result is reported as count 0, not an error. (The argument is declared optional so the refusal reaches the client as a payload instead of a framework-level validation crash.) |
| get_ecosystem_overviewB | Get the ecosystem at a glance: counts, principle, and package facts. Headline counts, the ecosystem principle, the category map, and the package facts a new user needs before anything else. |
| get_install_instructionsA | Get install commands and the MCP client config for wiring platworks in. Copy-pasteable: a pip install line and the mcpServers JSON for any MCP-capable editor or client. |
| get_demo_portfolioA | Get the synthetic demo portfolio (fabricated data, clearly labeled). The portfolio demonstrates how the ecosystem components compose per asset. All data is synthetic; the payload says so. |
| get_landing_pageA | Get the standalone product landing page as HTML (self-contained, no external assets). The HTML renders from the same verified catalog as every other tool: inline CSS, no CDN, no scripts, no tracking. |
| underwrite_runA | Run the deterministic underwriting engine on a canonical deal; certified metrics come from the engine, never a model. Pass the full canonical deal inputs (engine schema v0.1) — cohorts, market rent curves, opex table, purchase/debt/exit/fund assumptions, and a property tax policy. Returns the engine's own certified metrics (NOI, CoC, DSCR, IRR, equity multiple, yields) verbatim, with the engine version on every response. A canonical missing its tax policy is refused typed — the engine never guesses. (The argument is declared optional so a missing-input refusal reaches the client as a payload instead of a validation crash.) |
| underwrite_backsolveA | Backsolve the highest price meeting a target Year-1 post-debt cash-on-cash return, via the engine's own search. The engine re-prices debt, tax, and equity for every candidate price (bisection over full underwriting runs); the response reports the solved price, the achieved CoC, the iteration count, and the solved case's engine metrics. No price outside a proven bracket is ever returned. (The core arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
| tax_regime_lookupA | Researched, statute-cited property-tax regime schedule for one supported state (TX CA FL AL); unknown states refuse. Returns the regime's assessed-value computation and levy components as decimal strings, every statute citation, and requires_competent_human_review=true — statutory research is research, not law. Unknown jurisdictions refuse typed rather than shipping a plausible default. (The argument is declared optional so a missing-state refusal reaches the client as a payload instead of a validation crash.) |
| renovation_estimateA | Per-unit renovation cost ranges (low/high) with line items and age-based risk flags, from the costmodel KB. The costmodel's own knowledge base produces low/high ranges per line item (paint, flooring, cabinets, appliances, …) scaled by unit size and finish tier; a 1978-or-older build carries lead paint / asbestos / galvanized pipe risk flags. The estimate is a range, never a single invented number. (The core arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
| renovation_roiA | Check whether a renovation's rent lift clears the minimum ROI threshold (conservative: high cost). Always tests the HIGH end of the cost range: ROI = (annual rent lift / total cost high) x 100 against the 15% default gate. On a failure the result explains by how much it missed; it never silently rounds a miss into a pass. (The core arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
| generate_sowB | Contractor-ready scope of work with material specs and quality standards for a unit renovation. Produces line items with material specifications, quantity notes, and quality standards plus general conditions (permits, cleanup, warranty) — the document to hand a bidding contractor, generated deterministically from the same knowledge base as the estimate. (The core arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
| evaluate_bidA | Evaluate a contractor bid against the internal estimate; flags inflated, vague, and timeline risks. Line items 30%+ above the internal high estimate flag inflated; unmatched descriptions flag vague; short timelines flag change-order risk. The overall assessment (reasonable / concerns / reject) is the costmodel's deterministic verdict. (The arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
| ops_reviewA | Read-only review of one property and one period: occupancy, typed exceptions, oracle-bound variance only. The harness review reports occupancy change, feed freshness, and typed material exceptions with evidence citations. Missing budget is a blocker, never zero; without a bound variance oracle the review returns an honest VARIANCE_NOT_IMPLEMENTED blocked status, never a fabricated variance. Refuses wildcard or aggregate asset ids structurally. (The core arguments are declared optional so missing-input refusals reach the client as payloads instead of validation crashes.) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
The catalog tools (list_components, list_private_components, list_public_components, find_components, search_components) overlap in purpose and could be easily confused despite detailed descriptions. The underwriting and renovation tools are more distinct, but the listing cluster makes selection less certain.
Most tools use snake_case, but conventions are mixed: list_*/get_*/search_*/find_* follow a verb-first pattern, while underwrite_run, underwrite_backsolve, tax_regime_lookup, renovation_estimate, renovation_roi, and ops_review do not. Names remain readable and mostly predictable, but not uniformly consistent.
At 19 tools, the server sits in the heavy range and spans several distinct domains: component discovery, underwriting, renovation, and operations review. Each tool appears purposeful, but the breadth makes the surface feel larger than a tightly-scoped MCP server.
The component catalog is well covered with list/get/find/search/category/overview tools, and the underwriting workflow has run, backsolve, tax lookup, renovation estimate/ROI/SOW, bid evaluation, and ops review. Minor gaps exist, such as no explicit list of supported tax states or deal schema endpoint, but agents can complete core workflows without dead ends.