mcp-server
MCP server for Muovi, Argentina's trust-first local services marketplace: find pros, draft tasks.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"@muovi/mcp-server"
]
}
}
}Runnable packages
0.4.2stdioRemote endpoints
https://mcp.muovi.com.ar/streamable-httpWhat it can do
Tool inventory
Tools (8)
🟢muovi_search_professionals(service, neighborhood, city, verified_identity, has_matricula)
Find up to 5 Muovi professionals 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 one `rating` and one `review_count`, and `verifications`: for each professional, say whether identity, matrícula, background check (antecedentes) and phone are verified. Each result also has 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. 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). Use `muovi_get_professional` with the `id` for the full profile.
Input Schema
{
"type": "object",
"properties": {
"service": {
"type": "string",
"minLength": 1,
"description": "Required. Service slug (e.g. \"plomeria\"), from `muovi_list_services`."
},
"neighborhood": {
"type": "string",
"minLength": 1,
"description": "Required. Barrio slug (e.g. \"palermo\"), from `muovi_list_cities`."
},
"city": {
"type": "string",
"minLength": 1,
"description": "Optional. City slug (e.g. \"caba\"), needed only when a barrio slug exists in more than one city."
},
"verified_identity": {
"type": "boolean",
"description": "When true, only return professionals whose identity Muovi has verified."
},
"has_matricula": {
"type": "boolean",
"description": "When true, only return professionals with a verified matrícula on file (electricians, gas fitters, etc.)."
}
},
"required": [
"service",
"neighborhood"
],
"additionalProperties": false
}🟢muovi_get_professional(id)
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. To start a task for this professional, use `muovi_create_task_link` or `muovi_create_task_draft` with this `id` as `professional_id`.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢muovi_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.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢muovi_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.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢muovi_get_reviews(id, limit, offset)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Maximum number of reviews per page (default 20, max 50)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Zero-based offset into the review list for pagination."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢muovi_create_task_link(professional_id, service_slug)
Build a link that opens Muovi's own task creation for one professional and one service: pass the `id` of a result from `muovi_search_professionals` as `professional_id`, and a service slug from `muovi_list_services`. Any professional in the search results can be picked. When the person publishes the task, it goes to that professional first for 24 hours and then opens to everyone; on the form the person can choose to also receive offers from other professionals right away. The link opens Muovi's task form, not the professional's ProSite. This tool makes no network call and saves nothing: give the URL to the person, who completes the task on Muovi.
Input Schema
{
"type": "object",
"properties": {
"professional_id": {
"type": "string",
"minLength": 36,
"maxLength": 36,
"description": "The `id` of a professional from `muovi_search_professionals`."
},
"service_slug": {
"type": "string",
"minLength": 1,
"pattern": "^[a-z0-9][a-z0-9_-]{0,63}$",
"description": "The service slug to start the task with (from `muovi_list_services`)."
}
},
"required": [
"professional_id",
"service_slug"
],
"additionalProperties": false
}🟢muovi_get_service_requirements(service_slug)
List the questions Muovi asks for one service, so you can ask the person 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. Send the answers back keyed by slot `key` in the `slots` argument of `muovi_create_task_draft`. `photo_policy` says whether photos help; photos are added by the person on Muovi, not through this server. Read-only.
Input Schema
{
"type": "object",
"properties": {
"service_slug": {
"type": "string",
"minLength": 1,
"description": "The service slug (from `muovi_list_services`), e.g. \"plomeria\"."
}
},
"required": [
"service_slug"
],
"additionalProperties": false
}🟡muovi_create_task_draft(service_slug, professional_id, open_to_others, professional_slug, description, ...)
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, ask the person every required question, and send the answers in `slots` (keyed by slot key) with `location`. If a required answer is missing, the result has `status: "incomplete"`, lists the questions still to ask and carries no link: ask them and call again with every slot. 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 own check of the request raises a question, and the person confirms the address on a map 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 is still told. Set `open_to_others` from what the person chose; they can change it on the review form. A ProSite slug in `professional_slug` is still accepted instead of `professional_id`. Leave both out for a general request to get offers from several professionals. `service_slug` comes from `muovi_list_services`. A link nobody has opened expires 24 hours after it is created. The first person to open it takes the draft, signed in or not, and can reopen the link for up to 7 days, so give it only to that person. Do not include phone numbers, email addresses or other contact details in any text.
Input Schema
{
"type": "object",
"properties": {
"service_slug": {
"type": "string",
"minLength": 1,
"description": "The service slug (from `muovi_list_services`), e.g. \"electricidad\"."
},
"professional_id": {
"type": "string",
"description": "Optional. The `id` of a professional from `muovi_search_professionals` to direct the draft to. Omit for a general request."
},
"open_to_others": {
"type": "boolean",
"description": "Optional, with professional_id. True when the person also wants offers from other professionals right away; false or omitted gives the chosen professional the first 24 hours."
},
"professional_slug": {
"type": "string",
"description": "Optional. A ProSite slug from an older link, instead of professional_id."
},
"description": {
"type": "string",
"minLength": 1,
"description": "What the person needs done, in their words: 20 to 2000 characters."
},
"zone_text": {
"type": "string",
"description": "Optional. Where the job is, as free text (neighborhood or area), up to 120 characters."
},
"preferred_time": {
"type": "string",
"enum": [
"flexible",
"this_week",
"next_week",
"specific_date"
],
"description": "Optional. When the person wants it done. Use \"specific_date\" together with `preferred_date`."
},
"preferred_date": {
"type": "string",
"description": "Required with preferred_time \"specific_date\", otherwise omitted. YYYY-MM-DD, from today up to 90 days ahead (Argentina time)."
},
"slots": {
"type": "object",
"additionalProperties": true,
"description": "Optional. The person's answers, keyed by slot key from `muovi_get_service_requirements`. Send each value in the slot's `value_format`."
},
"location": {
"type": "object",
"properties": {
"neighborhood_slug": {
"type": "string",
"description": "A neighborhood slug from `muovi_list_cities`."
},
"city_slug": {
"type": "string",
"description": "Optional, with neighborhood_slug. A city slug from `muovi_list_cities`."
},
"address": {
"type": "string",
"description": "A street address as text, 3 to 200 characters."
}
},
"additionalProperties": false,
"description": "Optional. Where the job is: `neighborhood_slug`, `address`, or both. The address is saved as text; the person confirms the place on the map on Muovi."
},
"title": {
"type": "string",
"description": "Optional. A short title for the task, 5 to 80 characters. Left out, Muovi takes it from the description."
},
"budget_amount": {
"type": "number",
"description": "Optional. The person's budget in ARS, as a positive number."
},
"time_preferences": {
"type": "array",
"items": {
"type": "string",
"enum": [
"morning",
"midday",
"afternoon",
"evening"
]
},
"description": "Optional. The parts of the day that suit the person."
}
},
"required": [
"service_slug",
"description"
],
"additionalProperties": false
}Recommended Prompts
muovi_get_professionalmuovi_get_professionalmuovi_list_servicesmuovi_search_professionalsmuovi_search_professionalsCommunity
Evidence