PutRoots

com.putrootsPublished by putroots.comOfficial publisherv1.0.1Updated Oct 24, 2026

SF move agent: rentals with sources, no-SSN banking routes, and your move plan and drafts.

VerifiedStreamable HTTPWeb executableLocation & LifestyleProductivity & Workflow

Overview

AI-generated overview

PutRoots is a remote MCP server for San Francisco renters: it searches sourced rental listings and tracks a signed-in person's move plan, tasks and drafts.

What you can do
Search San Francisco rental listings by price, bedroom count or neighborhood, with source and last-seen date on each row, and read one listing's landlord requirements against what the renter filled in, line by line with quoted sentences. Find newcomer routes for banking, credit cards, phone plans and SSN that work without an SSN or US credit history, with real branches and stores. Create a pre-filled move sign-up link and read the signed-in person's move plan, next task, task details and recent move events. Prepare email or call drafts for a task, fill in fields a task is waiting on, and defer, rule out or restore tasks.
When to use it
Useful when helping someone find an apartment in San Francisco, compare what landlords require, plan the practical steps of a move, or work through move tasks with prepared drafts. Also relevant for newcomers who need routes that do not depend on an SSN or US credit history.
Requirements
A remote streamable HTTP endpoint at putroots.com; no package or local runtime. Some tools act on a signed-in PutRoots account, and search is limited without one. No environment variables or headers are declared.
Before you install
Several tools act on the signed-in person's move and change state: move_task_answer writes field values, move_task_defer rules tasks out or restores them, and move_task_draft prepares drafts. Drafts are never sent, dialed, submitted or paid by any tool; the person sends them in PutRoots. start_move returns a link attributed to the caller and creates nothing on the person's behalf. Listing and requirement data comes from third parties with stated sources and dates.

Installation

In SourceWeft

  1. Open PutRoots in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.putroots%2Fputroots/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "putroots": {
      "type": "http",
      "url": "https://www.putroots.com/mcp"
    }
  }
}

Tools

11

search_listings

Search SF rentals, with provenance

Search PutRoots' San Francisco rental index. Every row carries its source, the date we last saw it, and whether the landlord stated any requirements at all. Use this when someone asks what's available in SF at a price / bedroom count / neighborhood. Without a signed-in PutRoots account this searches the free sample only (3 listings per bedroom tier) and says so, with the true total.

Parametersbedshoodlimitmax_pricemin_price

listing_requirements

This listing's requirements vs. the renter, line by line

For one listing URL from search_listings: what the landlord requires, what the renter filled in, and the gap on each line — income, credit, SSN, deposit, pets, co-signer, documents. Each line carries the landlord's own sentence it was read from, plus where the rule came from and when we fetched it. Requires the renter's own PutRoots account (the comparison is against qualifications they filled in). It returns no overall verdict, by design.

Parameterslisting_urlrequired

newcomer_options

Bank account / phone plan / SSN, for someone with no SSN yet

The doors a newcomer has to walk through besides the apartment: opening a bank account, a credit card, a phone plan, or getting an SSN — specifically the routes that work without an SSN or US credit history. Returns real branches and stores (address, hours, phone) plus the no-branch options, each with its source and the date it was checked, and our firsthand account where we did it ourselves.

Parameterstopicrequired

start_move

Hand a mover over to PutRoots (a link, nothing created)

When someone has just signed a lease, accepted an offer, or otherwise has a move coming: returns a PutRoots link that pre-fills their move date and new address and attributes them to you. Nothing is created on their behalf — they sign up themselves by opening the link. Use the returned id with GET /v1/handoffs/{id} to see which stage of the move they are in.

Parametersd0tostagetriggerrequiredprofile_seed

move_plan

Where this move stands, in five numbers

The whole move at a glance for the signed-in person: days to move day, how many tasks there are, how many are settled, how many can be done right now, how many are blocked and how many are overdue, plus the critical path. Two rulers share that answer and they are not interchangeable: total and done count every task in the move, while actionable, blocked and overdue count only tasks that have been unlocked so far. Blocked therefore mixes two things — tasks missing an answer from the person, and tasks whose prerequisites aren't finished so they haven't been generated yet. Report the numbers as given; don't subtract one from another.

Takes no parameters.

move_tasks

The one thing to do next, and the few after it

What the signed-in person should do next on their move: one task to press, a few short lines after it, and a count of everything folded away. This is deliberately one screen, not the task list — picking which one matters is our job, not the caller's, and a task whose prerequisites aren't done doesn't appear at all (its prerequisite does). Use move_plan for totals. This is also the only place a task is marked in flight (we have evidence they already started it); move_task does not carry that flag.

Takes no parameters.

move_task

One task's current state

One task on the signed-in person's move: what it is, when it is due, what state it is in, any draft already prepared, and which fields it is waiting on them to answer. Read-only — opening a task leaves no trace. It does not tell you whether the task is in flight: that needs evidence lookups this cheap read skips on purpose. move_tasks is the only place "in progress" appears.

Parameterstask_idrequired

move_task_draft

Prepare a task (draft only — never sends)

Prepares one task for the signed-in person and stops. It writes the email or the call script and hands it back; it never sends, dials, submits or pays, and no MCP tool can. The person presses send themselves in PutRoots. It covers email and call tasks, plus a form-filling task that has already been tried and given up on (that falls back to a letter or a call). It cannot start the other two kinds: walk tasks (filling a form on a provider's own site) and research tasks (finding candidates, booking a viewing, filling a rental application) have no execution path here yet and will come back saying the task is neither an email nor a call. Those are done in the PutRoots web app; say so rather than retrying. If it comes back blocked, the task is waiting on a field only the person can answer — use move_task_answer, then call this again.

Parameterstotask_idrequired

move_task_answer

Answer one field a task is waiting on

Fills in one field the signed-in person's task is waiting on (the names come back in missing from move_task or move_task_draft). Only fields that task is actually asking for are accepted, and only values we can store — anything else is refused rather than silently dropped. Pass what the person actually said; never a guess or a plausible default.

Parametersfieldrequiredvaluerequiredtask_idrequired

move_task_defer

Put a task off, or rule it out

later = push it out; it comes back on its own in three days. not_applicable = it doesn't apply to this person; it leaves the list, stops counting against the move, and anything waiting on it can go ahead. undo = put a ruled-out task back. Only on the person's say-so: ruling a task out changes what the rest of the move waits on.

Parametersmoderequiredtask_idrequired

move_events

What has happened on this move since a given moment

The signed-in person's move events after an epoch-millisecond timestamp, oldest first — drafted, sent, called, answered, done, skipped. Use it to answer "what changed since we last spoke" without re-reading the whole plan. Capped; more says how many were left out.

Parameterslimitsince

Version history

1
  1. v1.0.1LatestSep 25, 2026

Score

83% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • LicenseNot applicable

    A hosted service is used under its provider's terms, so no license is expected here. This check is left out of the percentage.