PutRoots
Ce que fait ce MCP
Helps users search San Francisco rentals, compare listing requirements, manage move tasks, prepare drafts, and find relocation-related banking and phone options.
Outils
Schéma d’entrée
{'type': 'object', 'required': ['listing_url'], 'properties': {'listing_url': {'type': 'string', 'description': "The listing's url, exactly as returned by search_listings."}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['listing', 'price', 'source', 'items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'status', 'required', 'yours', 'detail'], 'properties': {'key': {'type': 'string'}, 'src': {'type': ['string', 'null'], 'description': "The landlord's own sentence this line was read from."}, 'label': {'type': 'string'}, 'yours': {'type': ['string', 'null'], 'description': 'What the renter filled in (null = not filled in).'}, 'detail': {'type': 'string'}, 'status': {'enum': ['meets', 'info', 'gap', 'unknown_user', 'unknown_landlord'], 'type': 'string'}, 'blocking': {'type': 'boolean'}, 'required': {'type': ['string', 'null'], 'description': 'What the landlord wrote (null = not stated).'}}}}, 'price': {'type': ['number', 'null']}, 'source': {'type': 'object', 'required': ['kind', 'from', 'fetched_at'], 'properties': {'from': {'type': 'string'}, 'kind': {'enum': ['landlord_rules', 'listing_text'], 'type': 'string'}, 'name': {'type': ['string', 'null']}, 'fetched_at': {'type': ['number', 'string', 'null'], 'description': 'Epoch ms for landlord rules; ISO date for listing text.'}, 'fetched_from': {'type': ['string', 'null']}}}, 'listing': {'type': 'string'}, 'summary': {'anyOf': [{'type': 'object', 'properties': {'met': {'type': 'integer'}, 'gaps': {'type': 'integer'}, 'info': {'type': 'integer'}, 'askYou': {'type': 'integer'}, 'askLandlord': {'type': 'integer'}}}, {'type': 'null'}]}, 'triage_tier': {'type': ['string', 'null']}}}
Schéma d’entrée
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Most recent N of the matches (default 100, max 500).'}, 'since': {'type': 'integer', 'minimum': 0, 'description': 'Epoch milliseconds; 0 for everything.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'since', 'events', 'more'], 'properties': {'ok': {'type': 'boolean'}, 'more': {'type': 'integer'}, 'since': {'type': 'integer'}, 'events': {'type': 'array', 'items': {'type': 'object', 'required': ['ts', 'type'], 'properties': {'ts': {'type': 'integer'}, 'type': {'type': 'string'}, 'detail': {'type': 'object'}}}}}}
Schéma d’entrée
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'd0', 'days_to_d0', 'total', 'done', 'actionable', 'blocked', 'overdue', 'critical_path', 'health'], 'properties': {'d0': {'type': 'string'}, 'ok': {'type': 'boolean'}, 'done': {'type': 'integer', 'description': 'Settled: done, sent, called, replied or marked not applicable (full ruler).'}, 'total': {'type': 'integer', 'description': 'Every task in this move (full ruler).'}, 'health': {'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'line': {'type': 'string'}}}, 'blocked': {'type': 'integer', 'description': 'total - done - actionable: tasks missing an answer AND tasks not yet unlocked, together.'}, 'overdue': {'type': 'integer', 'description': 'Past due, not in flight, not blocked (unlocked ruler).'}, 'actionable': {'type': 'integer', 'description': 'Unlocked and not waiting on an answer (unlocked ruler).'}, 'days_to_d0': {'type': 'integer'}, 'critical_path': {'type': 'object', 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}}, 'first': {'type': ['string', 'null']}, 'blocks': {'type': 'integer'}, 'remaining': {'type': 'integer'}}}}}
Schéma d’entrée
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'A task id exactly as move_tasks / move_plan returned it.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'id', 'title', 'kind', 'actor', 'due', 'dlabel', 'due_day', 'state'], 'properties': {'id': {'type': 'string'}, 'ok': {'type': 'boolean'}, 'due': {'type': 'integer'}, 'kind': {'type': 'string'}, 'actor': {'type': 'string'}, 'draft': {'type': 'object', 'description': 'Prepared, never sent.'}, 'state': {'type': 'string'}, 'title': {'type': 'string'}, 'dlabel': {'type': 'string'}, 'due_day': {'type': 'string'}, 'missing': {'type': 'array', 'items': {'type': 'string'}}, 'missing_text': {'type': 'array', 'items': {'type': 'string'}}}}
Schéma d’entrée
{'type': 'object', 'required': ['task_id', 'field', 'value'], 'properties': {'field': {'type': 'string', 'description': "A field name from the task's missing list."}, 'value': {'type': 'string', 'description': 'What the person said. Not inferred, not a placeholder.'}, 'task_id': {'type': 'string', 'description': 'A task id exactly as move_tasks / move_plan returned it.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'id', 'field'], 'properties': {'id': {'type': 'string'}, 'ok': {'type': 'boolean'}, 'field': {'type': 'string'}, 'state': {'type': ['string', 'null']}, 'closeout': {'type': 'object'}}}
Schéma d’entrée
{'type': 'object', 'required': ['task_id', 'mode'], 'properties': {'mode': {'enum': ['later', 'not_applicable', 'undo'], 'type': 'string'}, 'task_id': {'type': 'string', 'description': 'A task id exactly as move_tasks / move_plan returned it.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'state'], 'properties': {'ok': {'type': 'boolean'}, 'state': {'type': 'string'}, 'later_until': {'type': 'integer'}}}
Schéma d’entrée
{'type': 'object', 'required': ['task_id'], 'properties': {'to': {'type': 'string', 'description': 'Recipient, when the person supplies one: an email address for an email task, a phone number for a call task. Leave it out to use the recipient we already have.'}, 'task_id': {'type': 'string', 'description': 'A task id exactly as move_tasks / move_plan returned it.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['ok', 'state'], 'properties': {'ok': {'type': 'boolean'}, 'draft': {'type': 'object', 'description': 'to / subject / body, or the call script. Prepared, not sent.'}, 'state': {'type': 'string', 'description': 'drafted = ready for them to press send; blocked = waiting on an answer.'}, 'missing': {'type': 'array', 'items': {'type': 'string'}}, 'missing_text': {'type': 'array', 'items': {'type': 'string'}}}}
Schéma d’entrée
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['hero', 'rows', 'moreCount'], 'properties': {'hero': {'anyOf': [{'type': 'object', 'required': ['id', 'title', 'state', 'kind', 'actor', 'due', 'dlabel', 'due_day', 'unlocks'], 'properties': {'id': {'type': 'string'}, 'due': {'type': 'integer'}, 'kind': {'type': 'string', 'description': "How it gets done: email, call, walk (fill a form on someone's site), research (find candidates / book / fill an application), or user (only the person can)."}, 'actor': {'type': 'string', 'description': 'agent = we can do it for them; user = only they can.'}, 'state': {'type': 'string', 'description': 'todo / blocked / drafted / approved / sent / called / replied / done / skipped.'}, 'title': {'type': 'string'}, 'dlabel': {'type': 'string'}, 'due_day': {'type': 'string'}, 'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field names this task is waiting on — pass one to move_task_answer.'}, 'unlocks': {'type': 'integer', 'description': "How many tasks that don't exist yet would appear once this one is finished."}, 'in_flight': {'type': 'boolean', 'description': 'Evidence says they already started it, so it is not overdue and never the next thing to press.'}, 'overdue_days': {'type': 'integer'}}}, {'type': 'null'}], 'description': 'The single next thing, or null with blockedReason set.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'state', 'kind', 'actor', 'due', 'dlabel', 'due_day', 'unlocks'], 'properties': {'id': {'type': 'string'}, 'due': {'type': 'integer'}, 'kind': {'type': 'string', 'description': "How it gets done: email, call, walk (fill a form on someone's site), research (find candidates / book / fill an application), or user (only the person can)."}, 'actor': {'type': 'string', 'description': 'agent = we can do it for them; user = only they can.'}, 'state': {'type': 'string', 'description': 'todo / blocked / drafted / approved / sent / called / replied / done / skipped.'}, 'title': {'type': 'string'}, 'dlabel': {'type': 'string'}, 'due_day': {'type': 'string'}, 'missing': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field names this task is waiting on — pass one to move_task_answer.'}, 'unlocks': {'type': 'integer', 'description': "How many tasks that don't exist yet would appear once this one is finished."}, 'in_flight': {'type': 'boolean', 'description': 'Evidence says they already started it, so it is not overdue and never the next thing to press.'}, 'overdue_days': {'type': 'integer'}}}}, 'moreCount': {'type': 'integer'}, 'blockedReason': {'type': ['string', 'null'], 'description': 'no_move / nothing_open / all_in_flight — why there is no next thing.'}}}
Schéma d’entrée
{'type': 'object', 'required': ['topic'], 'properties': {'topic': {'enum': ['bank', 'card', 'sim', 'ssn'], 'type': 'string', 'description': 'bank = checking account, card = credit card, sim = phone plan, ssn = the SSN itself.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['topic', 'places', 'places_total', 'options'], 'properties': {'topic': {'type': 'string'}, 'places': {'type': 'array', 'items': {'type': 'object', 'description': 'A branch / store: name, addr, tel, hours, the no-SSN line with its source.'}}, 'options': {'type': 'array', 'items': {'type': 'object', 'description': 'A no-branch option: name, stance (official page) and firsthand stance, facts, url, source.'}}, 'prefNote': {'type': ['string', 'null']}, 'prefScope': {'type': ['string', 'null']}, 'places_total': {'type': 'integer'}}}
Schéma d’entrée
{'type': 'object', 'properties': {'beds': {'enum': ['room', 'studio', '1', '2', '3+'], 'type': 'string', 'description': 'Bedroom tier. "room" means a room in a shared place.'}, 'hood': {'type': 'string', 'description': 'Neighborhood name, matched loosely (e.g. "Mission", "Sunset").'}, 'limit': {'type': 'integer', 'maximum': 25, 'minimum': 1, 'description': 'How many to return (default 10, max 25). Newest first.'}, 'max_price': {'type': 'number', 'description': "Max monthly rent in USD. Listings with no stated price are excluded when you set this — we don't let unpriced posts through a price filter."}, 'min_price': {'type': 'number', 'description': 'Min monthly rent in USD.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['gated', 'total', 'searched', 'matched', 'listings'], 'properties': {'gated': {'type': 'boolean', 'description': 'true = free sample only (anonymous or partner key); total still tells the true index size.'}, 'total': {'type': 'integer'}, 'matched': {'type': 'integer'}, 'listings': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'price', 'source', 'requirements_stated'], 'properties': {'url': {'type': 'string'}, 'beds': {'type': ['string', 'null']}, 'hood': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'title': {'type': ['string', 'null']}, 'posted': {'type': ['string', 'null']}, 'source': {'type': ['string', 'null']}, 'last_seen': {'type': ['string', 'null']}, 'requirements_stated': {'type': 'boolean'}, 'not_checked_vs_budget': {'type': 'boolean'}}}}, 'searched': {'type': 'integer'}, 'not_checked_vs_budget': {'type': 'integer'}, 'listings_with_no_stated_requirements': {'type': 'integer'}}}
Schéma d’entrée
{'type': 'object', 'required': ['trigger'], 'properties': {'d0': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'Move-in day, YYYY-MM-DD.'}, 'to': {'type': 'string', 'maxLength': 200, 'description': 'The new address, as one line.'}, 'stage': {'enum': ['pre_arrival', 'housing', 'move_planning', 'move_logistics', 'activate', 'settle', 'stabilize'], 'type': 'string', 'description': 'Which stage of the journey they are in right now, if you know it.'}, 'trigger': {'type': 'string', 'maxLength': 60, 'description': 'What set the move off: lease_signed, offer_accepted, relocation_approved, or your own short label.'}, 'profile_seed': {'type': 'object', 'description': 'Reserved. Accepted but not applied yet — the person fills their own profile after signing up.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['id', 'url', 'partner', 'trigger', 'dry_run'], 'properties': {'d0': {'type': ['string', 'null']}, 'id': {'type': 'string'}, 'to': {'type': ['string', 'null']}, 'url': {'type': 'string'}, 'stage': {'type': ['string', 'null']}, 'dry_run': {'type': 'boolean', 'description': 'true when called with a pr_test_ key.'}, 'partner': {'type': 'string'}, 'trigger': {'type': 'string'}}}
Modifications récentes des outils
Serveurs MCP similaires
Enel SP: Gestão Imobiliária
Supports Enel São Paulo utility account lookups for property management workflows.
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Calcgrid
Runs general-purpose calculators for loans, dates, lunar and solar terms, time zones, units, and a larger catalog of specialized …
Local MCP
Connects AI assistants to Mac email, calendars, reminders, notes, tasks, files, Microsoft 365, Todoist, spreadsheets, and daily b…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
hopi
Provides read-only calculators, converters, validators, text utilities, encoders, and generators for everyday and technical tasks.
Microburbs Australian Property Data
Provides Australian property, suburb, valuation, sales, rental, zoning, school, risk, geospatial, and census statistics.
mu
Supports personal and collaborative tasks including web browsing, app creation, blogs, bookmarks, discussions, and contact manage…