Com

ar.com.muovi由 muovi.com.ar 发布官方发布者v0.4.2更新于 Oct 24, 2026

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

已验证Streamable HTTP可网页运行位置与生活商业与电商

概览

AI 生成的概览

Muovi 的 MCP 服务器让助手查找阿根廷经过验证的本地服务专业人员、查看其资料与评价,并准备任务草稿或链接。

可以做什么
列出服务目录以及 Muovi 覆盖的阿根廷城市和街区,把需求对应到有效标识并确认该区域可用。按一项服务和街区搜索最多五位专业人员,含评分、认证信息和作品图片。获取某位专业人员的完整公开资料和分页评价,按最新优先。为选定的专业人员和服 务生成进入 Muovi 自身任务创建流程的链接。读取 Muovi 对某项服务提出的问题,然后保存任务草稿并返回链接,由用户打开、查看并自行发布。
适用场景
当用户想在阿根廷聘请本地专业人员——如电力、水管、油漆等工种,或清洁、园艺、空调、搬家——并希望比较人选、查看评价,或把准备好的需求交给 Muovi 平台内流程时适用。
运行要求
可通过 npx 配合 Node.js 在本地运行,也可作为远程托管端点使用。公共 API 默认无需认证;可选设置 MUOVI_API_KEY 以获得更高限流额度。需要能访问 Muovi 的 API。API 基础地址和网页基础地址可选覆盖。
安装前请注意
README 说明托管远程端点和任务草稿工具尚未可靠上线,资料与评价工具在相关后端接口部署前对生产环境会失败。草稿工具会向 Muovi 写入草稿,但不发布内容、不通知任何专业人员。联系方式被刻意隐去;README 禁止自行拼凑平台外联系方式。草稿链接若未打开将在 24 小时后失效。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Com,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/ar.com.muovi%2Fmcp-server/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "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

来源:README.md,提交 10e0b45

工具

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

输入参数citypageservice必填neighborhood必填has_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`.

输入参数id必填

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.

无需输入参数。

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.

无需输入参数。

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.

输入参数id必填limitoffset

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.

输入参数service_slug必填

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

输入参数slotstitlelocationzone_textdescription必填service_slug必填budget_amountopen_to_otherspreferred_datepreferred_timeprofessional_idtime_preferences另有 1 个

版本历史

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

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分