mcp-server
Server Details
MCP server for Muovi, Argentina's trust-first local services marketplace: find pros, draft tasks.
- Status
- Healthy
- Uptime
- 100.0% over 73 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- muovi-latam/mcp-server
- GitHub Stars
- 1
- Server Listing
- @muovi/mcp-server
TDQS
Scored across 8 tools
Most tools target distinct resources: list_cities, list_services, search_professionals, get_professional, get_reviews, get_service_requirements are clearly separable. The only real overlap is muovi_create_task_draft vs muovi_create_task_link, both of which create a task and differ only in draft-vs-deep-link mechanics; the descriptions do explain the difference, but an agent could still pick the wrong one.
Every tool uses the same muovi_ prefix plus a consistent verb_noun pattern (list_cities, get_professional, search_professionals, create_task_draft). No mixing of camelCase or vague verbs.
Eight tools is well-scoped for a services-marketplace workflow: discovery (cities, services), matching (search, get_professional, reviews), requirements, and task creation. Each tool earns its place with no redundant entries.
The surface covers the full discovery-to-handover path: resolve location/service slugs, search, inspect a professional, read requirements, and create a draft or link. Minor gap: there is no tool to check a task's status or retrieve it after handing off, though that is arguably by design since the person publishes on Muovi.
Available Tools
8 toolsmuovi_create_task_draftCreate task draftAInspect
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| slots | No | Optional. The person's answers, keyed by slot key from `muovi_get_service_requirements`. Send each value in the slot's `value_format`. | |
| title | No | Optional. A short title for the task, 5 to 80 characters. Left out, Muovi takes it from the description. | |
| location | No | 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. | |
| zone_text | No | Optional. Where the job is, as free text (neighborhood or area), up to 120 characters. | |
| description | Yes | What the person needs done, in their words, with the job details a professional would need to quote it: 20 to 2000 characters. | |
| service_slug | Yes | The service slug (from `muovi_list_services`), e.g. "electricidad". | |
| budget_amount | No | Optional. The person's budget in ARS, as a positive number. | |
| open_to_others | No | 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. | |
| preferred_date | No | Required with preferred_time "specific_date", otherwise omitted. YYYY-MM-DD, from today up to 90 days ahead (Argentina time). | |
| preferred_time | No | Optional. When the person wants it done. Use "specific_date" together with `preferred_date`. | |
| professional_id | No | Optional. The `id` of a professional from `muovi_search_professionals` to direct the draft to. Omit for a general request. | |
| time_preferences | No | Optional. The parts of the day that suit the person. | |
| professional_slug | No | Optional. A ProSite slug from an older link, instead of professional_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true. The description goes far beyond them: it discloses that nothing is published or notified, that incomplete/invalid input returns status 'incomplete' or 'invalid_slots' with no link, that an unopened link expires in 24 hours, that the first opener takes the draft and can reopen for 7 days, and that contact details must be excluded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the publish-nothing guarantee are front-loaded, and nearly every sentence carries operational information for a 13-parameter tool. It is a dense, run-on paragraph without headings or bullets, which hurts scannability, but little of the content is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter mutation with no output schema, nested objects, and an interactive collection workflow, the description covers prerequisites, the interactive ask-loop, error statuses, link lifecycle, and privacy constraints. An agent has essentially everything needed to drive the flow correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: professional_id vs professional_slug equivalence, that open_to_others controls whether the chosen professional gets a 24-hour head start, that slots are keyed by slot key from muovi_get_service_requirements, and that a 'flexible' urgency needs no date.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a precise verb and resource ('Save a task draft on Muovi ... and get back a link') and immediately clarifies the crucial distinction that it publishes nothing, which separates it from a link/publication flow. An agent can tell what this tool does and what it does not do without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description routes the agent explicitly: call muovi_get_service_requirements first and collect its fields, use muovi_list_services for service_slug, muovi_search_professionals for professional_id, and leave both professional fields out for a general request. It also gives when-to-use rules for open_to_others and the one-question-per-message protocol.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_create_task_linkCreate task linkARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| service_slug | Yes | The service slug to start the task with (from `muovi_list_services`). | |
| professional_id | Yes | The `id` of a professional from `muovi_search_professionals`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnly, idempotent, non-destructive, but the description goes far beyond by disclosing no network call and nothing saved, and by explaining the 24-hour exclusivity window and the option to receive other offers immediately. This is meaningful behavioral context an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and then layers workflow and business rules efficiently. Slightly dense with multiple clauses, but every sentence earns its place and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter link builder with no output schema, the description covers inputs, workflow, business logic, and the no-side-effect guarantee. An agent has everything needed to call it and hand off the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented with source references in the schema. The description reinforces the source tools but adds no new syntax or format detail beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a clear verb and resource ('Build a link') and immediately scopes it to task creation for one professional and one service. It explicitly distinguishes itself from the ProSite and from the sibling draft tool by explaining the link opens Muovi's own task form.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent exactly which sibling outputs to feed in: professional_id from muovi_search_professionals and service_slug from muovi_list_services. Also clarifies the workflow — give the URL to the person who completes the task on Muovi — and states no network call is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_get_professionalGet professionalARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses what is returned field-by-field, what is deliberately withheld (phone, email, WhatsApp), and a non-obvious presentation rule about only naming verified checks and never flagging a missing one. This is exactly the kind of behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The return payload is front-loaded, followed by exclusions, presentation guidance, and next-step routing, and each sentence carries distinct information. It is on the long side, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating the returned fields and the intentionally omitted contact data, plus the downstream tool for starting a task. An agent has everything needed to call and use the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the id and the ProSite-slug fallback, so the description adds little new parameter meaning beyond restating provenance. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (the full public profile of one Muovi professional), scoped to a single entity, which cleanly separates it from muovi_search_professionals. It even names the upstream source of the id, so an agent knows exactly which tool produces the input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the id's provenance (muovi_search_professionals) and routes the next step to muovi_create_task_link / muovi_create_task_draft with the same id, which is clear contextual guidance. It does not state an explicit when-not-to-use case, so it stops short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_get_reviewsGet reviewsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted. | |
| limit | No | Maximum number of reviews per page (default 20, max 50). | |
| offset | No | Zero-based offset into the review list for pagination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), so the bar is lower, and the description clears it by disclosing sort order, pagination, and a privacy behavior an agent would otherwise not anticipate (surnames are redacted to 'María G.'). It does not state rate limits or empty-state behavior, but that is minor against the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and resource, then the derived-`id` routing rule before the field inventory. The field enumeration is long but earns its place because there is no output schema. Minor density cost from listing six fields in a single sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so explicitly: rating range, optional title/comment, reduced author name, author role, service category, and ISO created_at. Combined with the id-sourcing rule and pagination, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so `id`, `limit` (default 20, max 50), and `offset` are already fully documented in the schema, and the description adds no syntax beyond that. The only extra nuance, the accepted ProSite slug, is duplicated from the schema rather than expanded. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch paginated reviews for one Muovi professional'), names the ordering (most-recent first), and pins the resource identifier to the sibling tool that produces it. An agent can distinguish this from muovi_get_professional or muovi_search_professionals without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('surface social proof when recommending a professional') and ties the `id` to muovi_search_professionals, which routes the agent correctly. It stops short of stating when NOT to use it (e.g., when you only need aggregate rating, which muovi_get_professional may supply), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_get_service_requirementsGet service requirementsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| service_slug | Yes | The service slug (from `muovi_list_services`), e.g. "plomeria". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, and 'Read-only.' is consistent with them. Beyond that it discloses genuinely useful behavior: photos are added by the person on Muovi (not through this server), the address is confirmed on Muovi's map, and `photo_policy` indicates whether photos help. It stops short of describing any rate limits or error behavior, and much of the text is workflow rather than tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and routing are front-loaded, but the body sprawls across several concerns (slot field anatomy, collection protocol, urgency exception, photo policy, address confirmation) without separation, and repeats the `slots`/`description` destination more than once. Every idea is relevant, but the framing as one long paragraph makes it harder to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the returned slot shape (`key`, `question_es`, `type`, `options`, `value_format`, `required`, `ask_if`) and the `photo_policy` field. Combined with the routing to `muovi_create_task_draft` and the field-validation guidance, an agent has everything needed to call and consume this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
A single parameter with 100% schema coverage and an example value in the schema gives a baseline of 4. The description adds that the slug must come from `muovi_list_services`, which is the one piece of selection meaning the schema string alone doesn't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('List the fields Muovi takes for one service') and explicitly positions it relative to siblings by naming `muovi_create_task_draft` as its consumer and `muovi_list_services` as the source of the slug. An agent can distinguish it from every other muovi_* tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing is given: read this before calling `muovi_create_task_draft`, obtain the slug from `muovi_list_services`, ask one question per message and wait for the answer, and treat `flexible` urgency as complete without a date. It also states what not to do (don't ask optional slots as a list) and where the address/photo steps live.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_list_citiesList citiesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive), and the description adds real behavioral context: slugs are stable, the response nests neighborhoods under cities, and each entity exposes slug + name. It doesn't mention pagination or what happens for unsupported locations, but for a fixed catalog read that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned and followed by the slug contract and the call condition. No filler; every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-shape burden and does so: it names the city fields (slug, name), the nested neighborhood fields, and the stability guarantee. For a zero-param read tool this is complete enough to call and consume correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero-parameter tool, so the baseline is 4. The description goes further by explaining that the returned slug fields are the exact values expected by the `city` and `neighborhood` parameters of muovi_search_professionals, which links output semantics to downstream parameter use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every Argentine city Muovi serves') plus the nesting structure (active neighborhoods under each city). A reader immediately knows this is a location-taxonomy lookup and can distinguish it from siblings like muovi_search_professionals or muovi_list_services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the triggering condition: 'Call this when you need to resolve a user's location wording to a Muovi city or neighborhood slug.' It also names the downstream tools that consume the slugs, so the agent knows this is a prerequisite step rather than a terminal call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_list_servicesList servicesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds real context beyond them — a stable slug, the requires_matricula license flag, and ecosystem guarantees (identity-verified professionals, on-platform payment, dispute resolution) — but says nothing about auth needs, caching, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and scope, then return shape, then the usage trigger — good ordering with no boilerplate. The long parenthetical enumeration of Spanish trade names is useful for slug mapping but is the one place the sentence sprawls.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the fields returned (slug, name, optional description, requires_matricula). Combined with the zero-parameter schema and the sequencing guidance, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description does add cross-tool meaning by explaining that each entry's slug is the value to pass as the `service` parameter on muovi_search_professionals and muovi_create_task_link, which is more than an empty schema conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (list every service category Muovi supports) with an explicit geographic scope (Argentina) and an enumerated inventory of the categories returned. It is clearly distinguishable from siblings like muovi_list_cities or muovi_search_professionals, which operate on cities and professionals rather than the service taxonomy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Ends with an explicit sequencing rule: 'Call this first when you need to map a user's natural-language request to a Muovi service slug.' It also names the downstream consumers of the returned slug (muovi_search_professionals, muovi_create_task_link), so the agent knows both when to call it and what it enables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
muovi_search_professionalsSearch professionalsARead-onlyInspect
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 a matrícula or diploma 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 false there is no next page: do not say Muovi has no more professionals; offer a general request (muovi_create_task_draft without a professional) so other professionals can send offers. Never state how many professionals exist. Use muovi_get_professional with the id for the full profile.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional. City slug (e.g. "caba"), needed only when a barrio slug exists in more than one city. | |
| page | No | Optional. 1 (default), 2 or 3: the next 5 professionals of the same search. Pass the next page only when the previous response had `pagination.has_more` true. | |
| service | Yes | Required. Service slug (e.g. "plomeria"), from `muovi_list_services`. | |
| neighborhood | Yes | Required. Barrio slug (e.g. "palermo"), from `muovi_list_cities`. | |
| has_matricula | No | When true, only return professionals with a verified matrícula on file (electricians, gas fitters, etc.). | |
| verified_identity | No | When true, only return professionals whose identity Muovi has verified. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and open-world, and the description adds substantial context beyond them: the 3-page pagination ceiling, result ordering (declared trade first, then review score, other-trade businesses last), the exact return fields, and the explicit absence of phone/email/WhatsApp. It also discloses behavioral constraints an agent could otherwise violate, such as never stating how many professionals exist and never saying a check is unverified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and preconditions are front-loaded and most of the length is justified because there is no output schema, so field and ordering details must live here. It is nonetheless a dense block that mixes invocation guidance with presentation policy, and a few lines (e.g. how the card view renders photos) add little for the calling agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a 6-parameter search, the description carries the full burden and does: required inputs, result fields, ordering, pagination semantics, presentation rules and next-step tool routing. An agent has everything needed to call it correctly and to handle both the has_more and no-more-results cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents every parameter, including the slug sources (muovi_list_services, muovi_list_cities) and the page/has_more relationship. The description largely restates those dependencies rather than adding new meaning, and it never mentions the has_matricula or verified_identity filters or when to use the optional city override, so it does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb, resource, page size and scope: 'Find up to 5 Muovi professionals per page for one service in one barrio.' It also names the sibling boundary explicitly at the end ('Use muovi_get_professional with the id for the full profile'), so an agent can distinguish search from profile retrieval without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use rules and preconditions: both slugs are required and the agent must ask the user which service and barrio if unspecified. It also routes to concrete alternatives after results (muovi_create_task_link, muovi_create_task_draft with or without professional_id) and handles the has_more=false case with a named fallback rather than a dead end.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
muovi_create_task_draft1 field changed- changed
Input schema / properties / description / descriptionPrevious value: -"What the person needs done, in their words: 20 to 2000 characters."New value: +"What the person needs done, in their words, with the job details a professional would need to quote it: 20 to 2000 characters."
1 tool update
- Changed
muovi_search_professionals1 field changed- added
Input schema / properties / pageAdded value: +{ + "description": "Optional. 1 (default), 2 or 3: the next 5 professionals of the same search. Pass the next page only when the previous response had `pagination.has_more` true.", + "maximum": 3, + "minimum": 1, + "type": "integer" +}
6 tool updates
- Added
muovi_create_task_draft - Changed
muovi_create_task_link5 fields changed- added
Input schema / properties / professional_idAdded value: +{ + "description": "The `id` of a professional from `muovi_search_professionals`.", + "maxLength": 36, + "minLength": 36, + "type": "string" +} - removed
Input schema / properties / professional_slugRemoved value: -{ - "description": "The professional's URL-safe slug (from `muovi_search_professionals` or `muovi_get_professional`).", - "minLength": 1, - "pattern": "^[a-z0-9][a-z0-9.\\-]*$", - "type": "string" -} - changed
Input schema / properties / service_slug / descriptionPrevious value: -"The service slug to pre-fill in the task flow (from `muovi_list_services`)."New value: +"The service slug to start the task with (from `muovi_list_services`)." - changed
Input schema / properties / service_slug / patternPrevious value: -"^[a-z0-9][a-z0-9.\\-]*$"New value: +"^[a-z0-9][a-z0-9_-]{0,63}$" - changed
Input schema / requiredPrevious value: -[ - "professional_slug", - "service_slug" -]New value: +[ + "professional_id", + "service_slug" +]
- Changed
muovi_get_professional3 fields changed- added
Input schema / properties / idAdded value: +{ + "description": "The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted.", + "minLength": 1, + "type": "string" +} - removed
Input schema / properties / slugRemoved value: -{ - "description": "The professional's URL-safe slug (e.g. \"juan-p-electricista-caba\"). Obtain from `muovi_search_professionals`.", - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "slug" -]New value: +[ + "id" +]
- Changed
muovi_get_reviews3 fields changed- added
Input schema / properties / idAdded value: +{ + "description": "The professional's `id` from `muovi_search_professionals`. A ProSite slug from an older link is also accepted.", + "minLength": 1, + "type": "string" +} - removed
Input schema / properties / slugRemoved value: -{ - "description": "The professional's URL-safe slug. Obtain from `muovi_search_professionals` or `muovi_get_professional`.", - "minLength": 1, - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "slug" -]New value: +[ + "id" +]
- Added
muovi_get_service_requirements - Changed
muovi_search_professionals10 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City slug (e.g. \"caba\"). Matches `City.slug` in the catalog."New value: +"Optional. City slug (e.g. \"caba\"), needed only when a barrio slug exists in more than one city." - changed
Input schema / properties / has_matricula / descriptionPrevious value: -"When true, only return pros with a verified professional matrícula on file (electricians, gas fitters, etc.)."New value: +"When true, only return professionals with a verified matrícula on file (electricians, gas fitters, etc.)." - removed
Input schema / properties / limitRemoved value: -{ - "description": "Maximum number of results per page (default 20, max 50).", - "maximum": 50, - "minimum": 1, - "type": "integer" -} - removed
Input schema / properties / min_ratingRemoved value: -{ - "description": "Minimum blended average rating, 0-5 inclusive.", - "maximum": 5, - "minimum": 0, - "type": "number" -} - removed
Input schema / properties / min_reviewsRemoved value: -{ - "description": "Minimum blended review count.", - "minimum": 0, - "type": "integer" -} - changed
Input schema / properties / neighborhood / descriptionPrevious value: -"Neighborhood slug (e.g. \"palermo\"). Matches `Neighborhood.slug` in the catalog."New value: +"Required. Barrio slug (e.g. \"palermo\"), from `muovi_list_cities`." - removed
Input schema / properties / offsetRemoved value: -{ - "description": "Zero-based offset into the result set for pagination.", - "minimum": 0, - "type": "integer" -} - changed
Input schema / properties / service / descriptionPrevious value: -"Service slug (e.g. \"electricidad\"). Matches `Service.slug` in the catalog."New value: +"Required. Service slug (e.g. \"plomeria\"), from `muovi_list_services`." - changed
Input schema / properties / verified_identity / descriptionPrevious value: -"When true, only return pros whose identity has been verified by Muovi."New value: +"When true, only return professionals whose identity Muovi has verified." - added
Input schema / requiredAdded value: +[ + "service", + "neighborhood" +]
6 tool updates
- First observed
muovi_create_task_link - First observed
muovi_get_professional - First observed
muovi_get_reviews - First observed
muovi_list_cities - First observed
muovi_list_services - First observed
muovi_search_professionals
Related MCP Connectors
The official MCP Server for the Mux API
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for Karrito - the digital catalog builder for WhatsApp sellers in LATAM, enabling AI assistants to manage store operations like products, orders, discounts, reviews, shipping, and analytics.3031 npmMIT
- AlicenseBqualityDmaintenanceMCP server for managing Argentine judicial cases (expedientes) from portals like PJN, MEV, CABA, and custom cases, supporting CRUD operations, synchronization, and management of tasks, fees, and alerts.246 npmMIT
- AlicenseBqualityCmaintenanceMercado Pago's Official MCP Server offers tools so that developers can easily interact with our API using natural language, which simplifies tasks and product integration. Remotely hosted by Mercadolibre supporting Streamable HTTP Transport. Details on how to connect: https://mcp.mercadopago.com/19Apache 2.0
- -
Glama MCP Gateway
Add one secure layer between your agents and this server.