Com

ar.com.muoviPublished by muovi.com.arOfficial publisherv0.4.2Updated Oct 24, 2026

MCP server for Muovi, Argentina's trust-first local services marketplace: find pros, draft tasks.

VerifiedStreamable HTTPWeb executableLocation & LifestyleBusiness & Commerce

Overview

AI-generated overview

Muovi's MCP server lets an assistant find verified local service professionals in Argentina, read their profiles and reviews, and prepare a task draft or link.

What you can do
List the service catalog and the Argentine cities and barrios Muovi covers, to map a request to valid slugs and confirm the area is served. Search up to five professionals for one service in one barrio, with ratings, verifications and portfolio images. Fetch a professional's full public profile and paginated reviews, most recent first. Build a link into Muovi's own task creation for a chosen professional and service. Read the questions Muovi asks for a service, then save a task draft and return a link the user opens, reviews and publishes themselves.
When to use it
Useful when someone wants to hire a local professional in Argentina — a trade such as electricity, plumbing or painting, cleaning, gardening, air conditioning or moving — and wants to compare candidates, check reviews, or hand off a prepared request to Muovi's on-platform flow.
Requirements
Runs locally via npx with Node.js, or as a hosted remote endpoint. The public API is unauthenticated by default; an optional Muovi API key can be set in MUOVI_API_KEY for a higher rate-limit tier. Network access to Muovi's API is required. Optional overrides exist for the API base URL and the web base URL.
Before you install
The README states the hosted remote endpoint and the task-draft tool are not yet reliably live, and that the profile and reviews tools fail against production until backing endpoints deploy. The draft tool writes a draft to Muovi, though it publishes nothing and notifies no professional. Contact details are deliberately withheld; the README forbids synthesising off-platform contact handles. Draft links expire in 24 hours if unopened.

Installation

In SourceWeft

  1. Open Com 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/ar.com.muovi%2Fmcp-server/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": {
    "com": {
      "type": "http",
      "url": "https://mcp.muovi.com.ar/"
    }
  }
}

README

@muovi/mcp-server

[npm version]

Model Context Protocol (MCP) server for Muovi — LATAM's trust-first local services marketplace.

This package lets MCP-aware clients (Claude Desktop, Cursor, Claude Code, and any other MCP host) discover Muovi's verified LATAM service professionals, browse the service catalog and city list, read reviews, deep-link a user into the on-platform task-creation flow, and save a task draft the user publishes themselves. It is a thin wrapper over Muovi's public /v1 REST API.

Stdio mode. The package ships an npx-runnable binary that speaks JSON-RPC over stdin/stdout. The hosted HTTP/SSE variant is tracked separately (Muovi MOB-142).

What it exposes

Every tool is read-only except muovi_create_task_draft, which saves a draft on Muovi:

ToolWrapsPurpose
muovi_search_professionalsGET /v1/professionalsUp to 5 professionals for one service in one barrio. service and neighborhood are both required; every result has a coverage area that includes the barrio, and match names the service, barrio and city searched. Results list professionals who declare the searched trade first, ordered by review score, with verified identity, background check and matrícula counting toward it; professionals whose registered business is in another trade come last; there is no rating or review filter. Each result has one rating, one review_count, its verifications, up to 3 portfolio image URLs, an id and a profile_url (https://muovi.com.ar/profile/<id>), and no neighborhoods.
muovi_get_professionalGET /v1/professionals/{id}Fetch a single pro's full public profile (bio, portfolio, specialties, verifications) by the id from the search. A ProSite slug from an older link is also accepted.
muovi_list_servicesGET /v1/servicesThe full live service catalog — home trades (electricidad, plomería, gas, pintura, carpintería, cerrajería, albañilería, herrería, techista), limpieza, jardinería, aire acondicionado, plus moving/hauling: mudanzas (movers) and fletes (light freight).
muovi_list_citiesGET /v1/citiesEvery Argentine city Muovi serves, with neighborhoods.
muovi_get_reviewsGET /v1/professionals/{id}/reviewsPaginated reviews for a pro, most-recent first, by the same id.
muovi_create_task_link(pure formatter)Builds a link to Muovi's own task creation for one professional (professional_id, the search's id) and one service: https://muovi.com.ar/post-task/v2?pro=<id>&vertical=<service>&source=assistant-link. It works for every professional in the results. A missing or malformed argument is a tool error. Makes no HTTP call.
muovi_get_service_requirementsGET /v1/services/{service_slug}/requirementsLists the questions Muovi asks for one service (key, question in Spanish, type, accepted options, required or not), so the agent can ask the user before saving a draft.
muovi_create_task_draftPOST /v1/task-handoversSaves a task draft (service, description, optional zone, preferred time and professional) and returns a link that expires in 24 hours if nobody opens it. The user opens it, reviews the draft, signs in and publishes it; the tool publishes nothing. With professional_id (the search's id), the published task goes to that pro first for 24 hours and then opens to everyone; with open_to_others: true it opens to everyone right away and that pro is still told. The user can change that choice on the review form.

Anti-leakage policy

Muovi is on-platform-only. Phone, email, and WhatsApp handles are never returned by the public API — contact between consumers and professionals happens exclusively through Muovi's in-app conversation flow, reachable from each pro's profile_url.

This server enforces the policy twice:

  1. The /v1 API strips contact data server-side.
  2. Every tool response in this package also runs through a local anti-leakage detector (a Node-compatible mirror of src/lib/anti-leakage/detector.ts in the Muovi web repo). If a leak is detected at the agent boundary the tool returns a stable error to the LLM client and refuses to surface the payload.

Hosts that integrate this server must not synthesise off-platform contact handles from any field. Driving the user to profile_url (optionally with the deep-link query string) is the only sanctioned contact channel.

Installation & configuration

Claude Desktop

Open ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and add the server under mcpServers:

json
{  "mcpServers": {    "muovi": {      "command": "npx",      "args": ["-y", "@muovi/mcp-server"]    }  }}

If you have a Muovi API key (see Authentication below), pass it via env:

json
{  "mcpServers": {    "muovi": {      "command": "npx",      "args": ["-y", "@muovi/mcp-server"],      "env": {        "MUOVI_API_KEY": "your-key-here"      }    }  }}

Restart Claude Desktop after editing the config.

Cursor

Add to ~/.cursor/mcp.json (or your workspace's .cursor/mcp.json):

json
{  "mcpServers": {    "muovi": {      "command": "npx",      "args": ["-y", "@muovi/mcp-server"]    }  }}

Claude Code

Register the server with the Claude Code CLI:

bash
claude mcp add muovi --command "npx" --args "-y" "@muovi/mcp-server"

Or add it manually to your Claude Code settings:

json
{  "mcpServers": {    "muovi": {      "command": "npx",      "args": ["-y", "@muovi/mcp-server"]    }  }}

Manual / scripting

bash
npx -y @muovi/mcp-server

The process reads JSON-RPC on stdin and replies on stdout. All log output goes to stderr.

Authentication (optional)

All /v1 endpoints are public and unauthenticated by default. If your client has been issued a Muovi API key (higher rate-limit tier), set MUOVI_API_KEY in the server's environment and the package will forward it as the X-API-Key header on every request.

You can also override the API base URL for testing:

bash
MUOVI_API_BASE_URL=https://staging.muovi.com.ar/api/v1 npx -y @muovi/mcp-server

muovi_create_task_link builds its link on MUOVI_WEB_BASE_URL when that is an https origin with no path, and on https://muovi.com.ar otherwise.

Example agent workflow

A typical Claude conversation that uses these tools:

  1. User asks for "an electrician in Palermo who's properly licensed".
  2. Agent calls muovi_list_services to map "electrician" → electricidad.
  3. Agent calls muovi_list_cities to confirm palermo is a valid neighborhood under caba.
  4. Agent calls muovi_search_professionals with { service: "electricidad", neighborhood: "palermo", has_matricula: true } and gets up to 5 professionals. Without both a service and a barrio the tool answers an error asking for them, so the agent asks the user first.
  5. Agent shows the results and offers two choices: a task for one of those professionals, or a general request to get offers from several.
  6. For one professional, the agent can call muovi_get_professional and muovi_get_reviews with that result's id.
  7. Agent calls muovi_create_task_link with { professional_id, service_slug: "electricidad" } and surfaces the resulting URL — or calls muovi_create_task_draft with { service_slug: "electricidad", professional_id, description } so the user lands on a draft already written. For a general request it calls muovi_create_task_draft without a professional.
  8. User follows the link, lands on Muovi, reviews the draft, signs in, and publishes the task in the on-platform flow.

Step 8 — the on-platform flow — is where the task is published, and where payments and disputes run.

Local development

This package is the standalone muovi-latam/mcp-server repo. Clone it, install, and run tests:

bash
git clone [email protected]:muovi-latam/mcp-server.gitcd mcp-servernpm installnpm test            # unit + integration + OpenAPI drift checksnpm run typecheck   # strict TypeScriptnpm run build       # emits dist/

The OpenAPI drift test parses public/openapi.yaml and asserts each tool's input schema matches the corresponding operation's parameters exactly — adding a query param to /v1 requires updating the corresponding tool (and vice versa).

Publishing

npm publish is intentionally not wired into CI. Releases are cut manually from a clean tag:

bash
npm version patch    # or minor / majornpm publish --access publicgit push --follow-tags

prepublishOnly runs clean + build + test before any publish.

MCP Registry (mcp-publisher)

Beyond npm, this server is listed in the Model Context Protocol registry via the committed server.json manifest. Publishing to the registry is a manual step — there is deliberately no CI auto-publish (the registry is a low-frequency, human-gated surface, and namespace auth is interactive).

Committed namespace: ar.com.muovi/mcp-server — the reverse-DNS form of muovi.com.ar. This value lives in both server.json (name) and package.json (mcpName) and the two must stay byte-identical (the server-json test enforces equality). It must also match the identity you authenticate as with mcp-publisher (see below).

One-time namespace ownership setup

Prove ownership of the ar.com.muovi namespace once, before the first publish:

  • DNS (preferred): add the TXT record that mcp-publisher login dns prints to the muovi.com.ar zone, then authenticate against that domain. This ties the namespace to the domain we already control.
  • GitHub OAuth (fallback): mcp-publisher login github — authenticates via the muovi-latam GitHub org. Only use this if DNS verification is unavailable; the authenticated identity still has to line up with the committed ar.com.muovi/mcp-server namespace.

If the committed namespace and the authenticated identity disagree, mcp-publisher publish will reject the manifest — fix the namespace (in both files) or the login, do not force it.

Publish steps
bash
mcp-publisher validate ./server.json   # checks against the live registry schemamcp-publisher publish                   # publishes server.json under the authenticated namespace

validate is the step that confirms the manifest matches the current registry schema version — run it every time; the pinned $schema in server.json is a hint, not a guarantee the live schema hasn't moved.

Version-bump discipline

The server-json test asserts that four version fields agree. On every version bump, update all of them together, then re-publish to both npm and the registry:

  1. package.json → version
  2. src/server.ts → PACKAGE_VERSION
  3. server.json → version
  4. server.json → packages[0].version
Honest gating notes

The manifest advertises capabilities that are not yet fully live. Keep these caveats in mind (and do not overstate them to users):

  • Remote transport (remotes[].url = https://mcp.muovi.com.ar/) is only truthful once that endpoint reliably answers JSON-RPC initialize over streamable-HTTP. That hosted surface is tracked in MOB-207; until it lands, the stdio package (npx @muovi/mcp-server) is the only transport that actually works.
  • muovi_create_task_draft answers "not available" while task handovers are switched off on the server (TASK_HANDOVERS_ENABLED), which is the default.
  • muovi_get_professional and muovi_get_reviews remain broken against production until MOB-263 deploys the backing /v1 endpoints. The tools are registered and pass drift checks, but live calls will fail until then.

License

MIT.

Links

Source: README.md at commit 10e0b45

Tools

8

muovi_search_professionals

Search professionals

Find up to 5 Muovi professionals per page for one service in one barrio. Both `service` (a slug from `muovi_list_services`) and `neighborhood` (a barrio slug from `muovi_list_cities`) are required: if the person has not said which service they need and in which barrio, ask them before searching. Every professional returned has a coverage area that includes the searched barrio, and `match` in the response names the service, barrio and city searched: present the results as professionals who work in that barrio. Results list professionals who declare the searched trade first, ordered by review score, with verified identity, background check and matrícula counting toward it; professionals whose registered business is in another trade come last. Each result has a `display_name`, a `headline`, a photo (`avatar_url`), one `rating` and one `review_count`, `verifications`, up to 3 `portfolio` image URLs, an `id` and a `profile_url`, the professional's public profile page on Muovi; no phone, email or WhatsApp is returned. Where the client shows Muovi's card view, each professional's photo and portfolio images appear in it. Do not write images or image markdown: write a short text summary of each professional with the name, the headline, the rating with its review count and a link to `profile_url`, leaving out a field that is empty; for each professional, name only the checks Muovi has verified among identity, matrícula, background check (antecedentes) and phone, and never say that one is missing or not verified. After showing the results, offer the person two choices: a task for one professional (`muovi_create_task_link`, or `muovi_create_task_draft` with `professional_id`, passing that result's `id`), or a general request to get offers from several professionals (`muovi_create_task_draft` without a professional). When the person asks for more professionals and `pagination.has_more` is true, call again with the same arguments and the next `page` (up to 3). When `has_more` is

Parameterscitypageservicerequiredneighborhoodrequiredhas_matriculaverified_identity

muovi_get_professional

Get professional

Fetch the full public profile of one Muovi professional by the `id` from `muovi_search_professionals`. Returns display name, headline, bio, portfolio image URLs, specialties, city and neighborhoods, services, ratings, verifications, and `profile_url`, the professional's public profile page on Muovi. Phone, email and WhatsApp are not returned. When presenting the professional, name only the checks Muovi has verified among identity, matrícula, background check (antecedentes) and phone, and never say that one is missing or not verified. To start a task for this professional, use `muovi_create_task_link` or `muovi_create_task_draft` with this `id` as `professional_id`.

Parametersidrequired

muovi_list_services

List services

List every service category Muovi supports in Argentina — home trades (electricidad, plomería, gas, pintura, carpintería, cerrajería, albañilería, herrería, techista), limpieza, jardinería, aire acondicionado, and moving/hauling: mudanzas (movers) and fletes (light freight/hauling). Every listed professional is identity-verified and reviewed, with on-platform payment and dispute resolution. Each entry has a stable `slug` (used as the `service` parameter on `muovi_search_professionals` and `muovi_create_task_link`), a human-readable `name`, an optional description, and a `requires_matricula` flag indicating whether listed professionals must hold a verified professional license. Call this first when you need to map a user's natural-language request to a Muovi service slug.

Takes no parameters.

muovi_list_cities

List cities

List every Argentine city Muovi serves, with active neighborhoods nested under each. Each city has a stable `slug` (used as the `city` parameter on `muovi_search_professionals`) and a human-readable `name`. Each neighborhood has its own `slug` (used as the `neighborhood` parameter on `muovi_search_professionals`). Call this when you need to resolve a user's location wording to a Muovi city or neighborhood slug.

Takes no parameters.

muovi_get_reviews

Get reviews

Fetch paginated reviews for one Muovi professional by the `id` from `muovi_search_professionals`, sorted most-recent first. Each review has a 1-5 rating, an optional title and free-text comment, the author's reduced display name (e.g. "María G." — full surnames are not returned), the author role (`client` or `worker`), the service category the review is associated with, and an ISO `created_at` timestamp. Use this to surface social proof when recommending a professional.

Parametersidrequiredlimitoffset

muovi_get_service_requirements

Get service requirements

List the fields Muovi takes for one service, to read before calling `muovi_create_task_draft`. Pass a `service_slug` from `muovi_list_services`. Each slot has a `key`, the question in Spanish (`question_es`), a `type`, the accepted `options` for a choice, a `value_format` saying what to send, whether it is `required`, and an `ask_if` condition when it only applies after another answer. Collect every `required` slot, asking one question per message and waiting for the answer before asking the next. A draft whose `urgency` is `flexible` is complete without the date. The other slots are optional: do not ask them as a list; when what the person has told you, at any point in the conversation, gives an optional slot's value, send it in `slots` as well as writing it in `description`. Also ask what a professional would need to quote this specific job, skip anything the person already said, and write those details into the `description` of `muovi_create_task_draft`; no list of job questions is prescribed. Send the answers back keyed by slot `key` in the `slots` argument of `muovi_create_task_draft`. The person confirms the address on Muovi's map after opening the draft link. `photo_policy` says whether photos help; photos are added by the person on Muovi, not through this server. Read-only.

Parametersservice_slugrequired

muovi_create_task_draft

Create task draft

Save a task draft on Muovi for the person you are helping, and get back a link for them. The person opens the link, reviews the draft, signs in to Muovi and publishes it themselves. This tool publishes nothing and does not notify any professional. To hand over the full request, call `muovi_get_service_requirements` for the service first and collect the required fields it lists, asking one question per message and waiting for the answer before asking the next. A draft whose `urgency` is `flexible` is complete without the date. Also ask what a professional would need to quote this specific job, skip anything the person already said, and write those details into `description`; no list of job questions is prescribed. Send the answers in `slots` (keyed by slot key) with `location`. Do not ask the optional slots as a list; when what the person has told you, at any point in the conversation, gives an optional slot's value, send it in `slots` as well as writing it in `description`. If a required answer is missing, the result has `status: "incomplete"`, lists the questions still to ask and carries no link: ask them one per message and call again with every answer. If a value is not accepted, the result has `status: "invalid_slots"` and names each slot. A draft with every required answer opens on a review form with those answers filled in, without asking them again, unless Muovi's assistant has a question of its own for the person, and the person confirms the address on Muovi's map after opening the link, before publishing. Sending only `description` still saves a draft, and that link opens Muovi's assistant, which asks the person its questions. To direct the draft to one professional, pass `professional_id`, the `id` of any result from `muovi_search_professionals`: when the person publishes it, the task goes to that professional first for 24 hours and then opens to everyone, unless `open_to_others` is true, in which case it opens to everyone right away and that professional

Parametersslotstitlelocationzone_textdescriptionrequiredservice_slugrequiredbudget_amountopen_to_otherspreferred_datepreferred_timeprofessional_idtime_preferences+1 more

Version history

4
  1. v0.4.2LatestOct 6, 2026
  2. v0.4.1Oct 6, 2026
  3. v0.4.0Oct 5, 2026
  4. v0.1.4Sep 16, 2026

Score

100% 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
  • License10 pts