pik-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pik-mcpsearch for used cars in Sarajevo under 5000 KM"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pik-mcp
An MCP server that exposes the
OLX.ba marketplace API (base URL https://api.olx.ba,
documentation) as tools an LLM client can call:
authenticate, browse and manage listings, read categories/attributes/locations, and
run sponsorship/discount actions.
Setup
npm install
npm run buildCopy .env.example to .env and fill in your OLX credentials:
OLX_USERNAME=your-username-or-email
OLX_PASSWORD=your-password
OLX_DEVICE_NAME=pik-mcp # optional
OLX_BASE_URL=https://api.olx.ba # optionalThe server logs in with these credentials on the first tool call, caches the bearer token in memory, and automatically re-authenticates if the token expires (HTTP 401). Credentials are never written to stdout (the MCP transport); logs go to stderr.
Related MCP server: yellow-pages
Running
pik-mcp speaks MCP over stdio. Point any MCP client at node dist/index.js.
Claude Desktop / Claude Code config
{
"mcpServers": {
"olx": {
"command": "node",
"args": ["C:/Users/dkasi/Documents/Projects/pik-mcp/dist/index.js"],
"env": {
"OLX_USERNAME": "your-username-or-email",
"OLX_PASSWORD": "your-password"
}
}
}
}Inspect / debug
npm run inspect # opens @modelcontextprotocol/inspector against the serverTools
Group | Tools |
Auth |
|
Listings (read) |
|
Categories |
|
Locations |
|
Listings (write) |
|
Images |
|
Sponsored / discount |
|
Destructive tools (delete_listing, finish_listing, image delete) and paid tools
(sponsor_listing, set_listing_discount) are flagged via MCP annotations and their
descriptions. refresh_listing may consume a paid refresh once the free quota is
exhausted — check get_refresh_limits first.
Searching listings
search_listings performs full-text search over OLX (GET /search). It is
public and works without credentials, so you can browse even before setting up
login. It accepts typed filters — q, category_id, brand_id, city_id,
price_from/price_to, state (condition id, e.g. 2 = used), created_gte
(e.g. "-24 hours"), per_page, page, sort_by/sort_order — plus an
extra_params object passed through verbatim for advanced keys such as attribute
filters (attr, attr_encoded).
By default it returns a compact summary per listing (id, title, price,
category/brand/city ids, condition, date, cover image, and a
https://olx.ba/artikal/{id} URL) alongside pagination meta and category
aggregations. Pass raw: true to get the full untrimmed API payload.
Typical create-and-publish flow
suggest_category/find_category→ pick acategory_idget_category_attributes→ see required attributes;get_category_brands/get_category_modelsif applicableget_city(orlist_cities) → pick acity_idcreate_listing→ returns a DRAFT listing idupload_listing_image→ attach photos;set_main_listing_imagefor the coverpublish_listing→ makes it visible in search
Notes / limitations
The documented API exposes no generic "search all listings" endpoint. Browsing is done via categories + a user's listings (
get_user_listings).Some success messages from OLX are in Bosnian (e.g. "Oglas je uspjesno objavljen") and are passed through as-is.
Project layout
src/
index.ts entry point (stdio transport)
server.ts builds McpServer, registers all tool groups
config.ts env-based configuration
olx/
client.ts HTTP client: auth, token cache, 401 retry, error mapping
types.ts response shapes
tools/ one file per resource group
util/ shared zod schemas + result formattingAvailable Tools
35 toolscreate_listingCreate listing (draft)A
Create a new listing in DRAFT status (POST /listings). Only title is required. The listing is NOT visible until you call publish_listing. Resolve category_id via the category tools and city_id via the location tools first.
| Name | Required | Description | Default |
|---|---|---|---|
| price | No | ||
| state | No | Item condition | |
| title | Yes | Listing title (required) | |
| city_id | No | ||
| brand_id | No | ||
| model_id | No | ||
| available | No | Available quantity | |
| attributes | No | ||
| country_id | No | ||
| sku_number | No | ||
| category_id | No | ||
| description | No | ||
| listing_type | No | ||
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and openWorldHint=true, and the description correctly indicates that the tool creates a listing (write operation) in draft status, not yet visible. It does not discuss side effects beyond creation, but the draft status is disclosed. Given openWorldHint=true, additional context about potential side effects would be beneficial, but the description does not contradict 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?
The description is concise, consisting of three sentences that are front-loaded with the core action. Every sentence adds value: creation in draft, required field, visibility after publish, and prerequisite resolution. No unnecessary words.
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?
Despite having 14 parameters and no output schema, the description does not explain the response format, error handling, or details for most parameters. It covers the essential flow but lacks completeness for a complex tool. The annotations include openWorldHint=true, which suggests additional side effects are possible but not elaborated.
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 input schema has 14 parameters with only 21% described in the schema. The description adds minimal parameter semantics: it notes that only title is required and advises to resolve category_id and city_id from other tools. It does not explain other parameters like price, state, attributes, etc. With low schema coverage, the description should provide more guidance on parameter usage.
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 description clearly states that the tool creates a new listing in DRAFT status, specifies the HTTP method (POST) and resource (/listings), and distinguishes it from publish_listing. It also notes the only required field (title), making the purpose unambiguous.
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 explains that only title is required and that the listing is not visible until published via publish_listing. It provides prerequisites: resolve category_id and city_id using category and location tools. While it doesn't explicitly mention when not to use this tool or compare to other siblings, it gives clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listingDelete listing (permanent)ADestructive
PERMANENTLY delete a listing (DELETE /listings/:id). This is irreversible — confirm with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: 'PERMANENTLY delete', 'irreversible', and confirmation requirement. Annotations already set destructiveHint=true, and description reinforces appropriately.
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 with no superfluous words. The first sentence delivers the core action and route, the second adds critical warning.
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?
Simple tool with one parameter. Description is sufficient for correct use, covering purpose, permanence, and user confirmation.
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 has 100% coverage for the single parameter 'id' with description. The tool description does not add extra detail beyond what schema provides.
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 the action (delete), resource (listing), and emphasizes permanence. Clearly distinguishes from other listing actions like hide_listing or finish_listing.
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 instructs to confirm with the user before calling, providing clear when-not guidance. Does not explicitly list alternatives but the permanence hints at contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listing_imageDelete listing imageADestructive
Remove one image from a listing (POST /listings/:id/image-delete).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| imageId | Yes | Image id to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'remove' is consistent. Description adds the HTTP endpoint, but no additional behavioral context beyond 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?
Single sentence, front-loaded, no unnecessary words. Every part of the description is useful and earns its place.
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, but the tool is simple. However, for a destructive operation, details about reversibility or cascading effects are missing. Adequate but not fully complete.
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 both parameters are well-described in the schema. The description does not add any extra meaning beyond what the schema provides.
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?
Description clearly states the verb 'remove' and resource 'one image from a listing'. It is specific and distinguishes this tool from sibling tools like upload_listing_image or set_main_listing_image.
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?
No guidance on when to use this tool versus alternatives like upload_listing_image or set_main_listing_image. The description lacks context for appropriate usage or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_categoryFind category by nameARead-only
Find categories matching a name, with their hierarchical path (GET /categories/find?name=).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint true and openWorldHint true. Description adds that results include hierarchical path, providing some output behavior context. However, no mention of pagination, sorting, or error handling beyond 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?
Single sentence with endpoint reference, no filler. Every word adds value.
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 single-parameter read-only search tool, the description covers purpose, input, and output (hierarchical path). No output schema but description provides enough context for an agent. Slightly lacking sibling differentiation but otherwise complete.
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% (name parameter described). Description paraphrases the name parameter but adds no additional semantics beyond the schema. 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?
Clear verb 'find' and resource 'category', with explicit output detail 'hierarchical path'. Distinguishes from siblings like get_category (by ID) and list_categories (list all).
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?
Description implies usage for searching by name but does not explicitly state when to use this over alternative category tools (e.g., get_category, suggest_category). No exclusion criteria or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_listingFinish listing (mark sold)ADestructive
Mark a listing as completed/sold (POST /listings/:id/finish). This ends the active listing; it moves to the user's finished listings.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Descriptions adds behavioral context beyond annotations by specifying that the listing ends its active state and moves to finished listings. Annotations declare destructiveHint true, and this description aligns without contradiction.
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 action and endpoint, no wasted words. Efficiently conveys purpose.
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 single-parameter tool with no output schema, the description covers the effect. However, it omits prerequisites like whether the listing must be active or owned by the user, leaving minor gaps.
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% with parameter 'id' described as 'Listing id'. The description does not add extra meaning beyond the schema, meeting baseline for high coverage.
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 description clearly states it marks a listing as completed/sold, using the verb 'mark' and resource 'listing'. It distinguishes from siblings like delete_listing by noting it moves to finished listings.
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 implies usage when a listing is sold or completed, but does not explicitly state when to use this tool versus alternatives like hide_listing or delete_listing, nor are exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_listing_discountFinish listing discountA
End an active discount early and restore the original price (POST /listings/:id/discount/finish).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the behavioral effect (ends discount, restores original price) which goes beyond the annotations (readOnlyHint=false, openWorldHint=true). It adds clear context for the write operation.
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 description is a single sentence containing all necessary information without unnecessary words. It also includes the HTTP method and path for reference.
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?
Given a single parameter, no output schema, and adequate annotations, the description sufficiently covers what the tool does. Minor gap: no mention of expected response or side effects, but overall complete.
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 description does not add additional meaning beyond the schema parameter description 'Listing id'. Baseline score of 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?
The description clearly states the action ('End an active discount early and restore the original price') and the resource ('active discount'). It distinguishes from sibling tools like 'set_listing_discount' and 'finish_listing'.
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 implies usage context (ending a discount early) but does not provide explicit when-not-to-use or alternatives. It could mention that this only affects discounts, not the listing itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_canton_citiesGet cities in a cantonARead-only
Return the cities within a canton (GET /cantons/:id/cities).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Canton id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds the HTTP method but no further behavioral traits (e.g., result format, pagination). Minimal addition beyond 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?
Extremely concise – a single sentence that front-loads the purpose. Every word serves a purpose.
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 simple GET tool with no output schema, the description adequately conveys the purpose and resource. However, it does not specify the response format, which would be helpful given no output schema.
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 the schema fully documents the single parameter. The description adds no additional meaning beyond what the schema provides.
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 description clearly states the action (return), the resource (cities within a canton), and the endpoint, distinguishing it from siblings like list_cities that return all cities.
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 implies usage through the endpoint but lacks explicit guidance on when to use this tool vs alternatives like get_city or list_cities. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoryGet category detailARead-only
Return a single category with detailed properties such as base_listing_price and top_category status (GET /category/:id).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds detail about returned properties and HTTP method beyond annotations which already declare read-only and open-world hints.
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?
Single sentence, concise, front-loaded with action. No unnecessary words.
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?
Sufficient for a simple read tool with one parameter, though lacks full return schema; mentions key properties.
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 already covers the parameter fully (100% coverage), description adds no new meaning to the 'id' parameter.
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?
Clearly states it returns a single category with specific properties, and distinguishes from sibling tools like list_categories.
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?
Implies usage for fetching a single category's details, but does not explicitly state when to use vs alternatives like get_category_children or list_categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_attributesGet category attributesARead-only
Return the attributes for a category (GET /categories/:id/attributes), including input_type, options and whether each is required. These define the attributes you can set when creating a listing in this category.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows it's a safe read operation. The description adds value by detailing what is returned (input_type, options, required status) and linking to the HTTP endpoint. No contradictions; the description complements the annotations well.
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 description is two short sentences, front-loaded with the core functionality and endpoint, followed by a contextual note about listing creation. No unnecessary words, every sentence earns its place.
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?
Given the tool's simplicity (one required parameter, no output schema), the description is complete. It explains the return structure (input_type, options, required) and explicitly links the tool's output to the workflow of creating a listing. No gaps are present.
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 input schema covers the single parameter 'id' with a description ('Category id') and constraints (exclusiveMinimum:0). Schema description coverage is 100%, so the description does not need to add parameter details. The description does not repeat parameter info but adds context about why the parameter matters (listing creation), which is helpful but not essential. Baseline score of 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?
The description clearly states it returns attributes for a category including input_type, options, and required status. It distinguishes effectively from sibling tools like get_category (returns category details) and get_category_children (returns children). The verb 'Return' and resource 'attributes for a category' are specific and unambiguous.
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 implies usage when needing to know category attributes for creating a listing ('These define the `attributes` you can set when creating a listing in this category'). However, it does not explicitly state when to use this tool versus alternatives or provide any exclusions or prerequisites. This leaves room for confusion among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_brandsGet category brandsBRead-only
Return the brands available for a category (GET /categories/:id/brands).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what annotations already indicate (readOnlyHint, openWorldHint). It does not mention data ordering, pagination, or potential empty results.
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 description is a single, efficient sentence with no wasted words, conveying the essential purpose and endpoint.
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 simple read-only tool with one parameter and no output schema, the description is minimally complete. However, it lacks information about the structure or size of the response.
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 parameter 'id' is described. The description does not add further meaning beyond the schema, so baseline score applies.
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 description explicitly states the function ('Return the brands available for a category') and provides the HTTP endpoint, clearly distinguishing it from sibling tools like get_category or get_category_children.
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?
No guidance on when to use this tool versus alternatives, no exclusion criteria, and no mention of prerequisites (e.g., valid category id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_childrenGet child categoriesARead-only
Return the child categories of a category (GET /categories/:id). Use this to walk the category tree down to a leaf before creating a listing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Parent category id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and completeness. The description adds minimal behavioral context beyond stating the HTTP method, so it does not significantly enhance transparency.
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 description is two sentences: one stating the core function and one providing usage guidance. No unnecessary words, highly efficient for the 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?
For a simple read tool with one parameter and good annotations, the description is mostly complete. It could explicitly mention the return type (list of categories) but is still functional as-is.
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 input schema provides full coverage with a description of 'id' as 'Parent category id'. The description does not add additional meaning beyond the schema, meeting 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?
The description states it returns child categories of a given category, using the endpoint GET /categories/:id. It clearly identifies the verb and resource, but does not explicitly distinguish from sibling tools like get_category or list_categories.
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 advises using this tool to walk the category tree down to a leaf before creating a listing, providing explicit context. It does not mention when not to use it or alternative tools, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_modelsGet brand modelsARead-only
Return the models for a brand within a category (GET /categories/:id/brands/:brand_id/models).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Category id | |
| brand_id | Yes | Brand id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds the endpoint path but no further behavioral traits (e.g., no side effects, rate limits). It does not contradict 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?
Single sentence, front-loaded with purpose and endpoint. Efficient but could include more context without becoming verbose.
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 simple retrieval tool with two required parameters and no output schema, the description is adequate. Annotations provide readOnly and openWorld hints, completing the picture.
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% with basic descriptions for id and brand_id. The tool description does not add additional meaning beyond the schema; baseline score of 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?
The description clearly states the tool returns models for a brand within a category, using a specific verb and resource, and distinguishes it from siblings like get_category_brands and get_category_children.
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?
No guidance on when to use this tool versus alternatives; no exclusions or context provided beyond the basic operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cityGet city detailARead-only
Return a single city with coordinates, zip_code, country_id and canton_id (GET /cities/:id). Use the id as city_id when creating a listing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | City id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds the fields returned and a usage hint, but does not disclose additional behavioral traits beyond what annotations cover.
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 concise sentences with no wasted words. Front-loaded with the primary purpose. Excellent structure.
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 simple tool with one parameter and no output schema, the description covers the purpose, returned fields, and a usage hint. It is adequately complete.
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 description adds extra meaning by connecting the 'id' parameter to its use as 'city_id' when creating a listing, providing context beyond the schema.
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 description clearly states it returns a single city with specific fields (coordinates, zip_code, country_id, canton_id) and provides the API endpoint. This distinguishes it from sibling list tools like list_cities or get_canton_cities.
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 implies usage when needing city details for creating a listing, but does not explicitly state when to use this over alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingGet listingARead-only
Retrieve a single listing by its id (GET /listings/:id). Returns the full listing object: title, price, location, status, images and owner details.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by stating the HTTP method (GET) and listing the returned fields. However, it does not disclose error handling or other behavioral traits beyond what annotations provide.
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 key action and endpoint, no unnecessary words.
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 simple get-by-ID tool with good annotations and a single parameter, the description is adequate. It covers the purpose and return fields. Missing details like error handling, but acceptable given the tool's simplicity.
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% with a description for the 'id' parameter. The tool description does not add any additional meaning beyond the schema, 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?
The description clearly identifies the action ('Retrieve a single listing by its id'), specifies the resource, and distinguishes it from siblings like 'get_user_listings' or 'search_listings'. It also lists the returned fields.
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?
No explicit guidance on when to use this tool vs. alternatives. The description implies it is for a single listing, but does not provide when-not-to-use or mention siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listing_limitsGet listing limitsARead-only
Return per-category listing limits (cars, real-estate, other) with current counts (GET /listing-limits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the HTTP endpoint and confirms it returns per-category counts, which goes beyond the readOnlyHint annotation. However, it does not disclose rate limits, authentication requirements, or any side-effects. With annotations already indicating read-only and open-world, the description provides modest additional context.
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 description is a single sentence that front-loads the main action and includes relevant details (categories, counts, endpoint). Every word earns its place; there is no redundancy or fluff.
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?
Given the tool has no parameters and no output schema, the description adequately specifies the return content. It could optionally mention the response format (e.g., object keyed by category), but the current level of detail is sufficient for an agent to understand what to expect.
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 input schema has no parameters and 100% schema coverage, so the description does not need to explain parameters. It adds value by specifying the output (per-category limits with counts), which helps the agent understand what the tool returns.
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 description clearly states the tool returns per-category listing limits with current counts for specific categories, using a specific verb and resource. It distinguishes itself from siblings like get_refresh_limits or get_listing by focusing on limits rather than individual listings.
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 does not explicitly state when to use this tool versus alternatives. While the purpose is clear, there is no guidance on circumstances that would make this tool preferable over others, such as get_refresh_limits or search_listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_refresh_limitsGet refresh limitsARead-only
Return refresh quota: free_limit, free_count, paid_count, listing_count (GET /listing/refresh/limits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the agent knows it's a safe read. The description adds value by enumerating the returned fields, which is beyond what annotations offer. No contradictions.
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?
Single concise sentence that front-loads the purpose and lists return fields. No wasted words.
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?
Given no parameters, no output schema, and annotations covering safety, the description is complete enough. It specifies the exact return fields, which is sufficient for agent understanding.
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?
No parameters; schema coverage is 100% with empty properties. Baseline score of 4 applies because the description does not need to add parameter information.
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 description clearly states it returns refresh quota with specific fields (free_limit, free_count, paid_count, listing_count). The mention of the HTTP endpoint adds precision, and it distinguishes from sibling 'get_listing_limits' by focusing on refresh quotas.
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?
No guidance on when to use this tool vs alternatives like 'get_listing_limits' or 'refresh_listing'. The description does not mention prerequisites or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sponsor_priceGet sponsorship price quoteARead-only
Get a price quote for sponsoring a listing (GET /listings/:id/sponsore/price). Read-only — ALWAYS call this and show the quote to the user before sponsor_listing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| days | Yes | Duration in days | |
| type | Yes | Sponsorship type: 0, 1 or 2 | |
| locations | No | Promotion locations, e.g. ["homepage"] | |
| refresh_every | Yes | Auto-refresh interval in hours (0 = none) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only annotation and adds critical usage behavior: always call before sponsor_listing and show the quote. This goes beyond the annotation by providing a protocol for the agent. It omits mention of error cases but is sufficient for a simple read operation.
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?
Single sentence with endpoint appended, no fluff. Every word adds value, and the instruction is front-loaded. Ideal length.
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?
The tool has no output schema, but the description implies the quote is returned ('show the quote'). It doesn't specify the return format, but the simplicity of a price quote and the openWorldHint make this acceptable. Could mention that the quote is a numeric value.
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 description does not need to elaborate on parameters. The description adds no extra semantics beyond what the schema provides, meeting the baseline of 3.
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 description clearly states the tool's purpose ('Get a price quote for sponsoring a listing') and includes the endpoint, making it distinct from siblings like sponsor_listing. It specifies the action (get), resource (sponsoring a listing), and context.
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 guidance: 'Read-only — ALWAYS call this and show the quote to the user before sponsor_listing.' This tells the agent exactly when to use it and what to do with the output, clearly differentiating it from sponsor_listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_listingsGet a user's listingsARead-only
List a user's listings, filtered by state (GET /users/:user/listings and its finished/inactive/expired/hidden variants). Paginated. Use state: active for the public/visible listings. The user is a username for active listings and a user id for the other states, matching the OLX API.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number for paginated results | |
| user | Yes | Username (for active) or user id (for other states) | |
| state | No | Which set of the user's listings to return | active |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that the tool is paginated and explains the user/state parameter variations. No contradictions; adds behavioral context beyond 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?
Two sentences, no redundancy. Front-loaded with purpose, then usage hints. Every sentence adds value.
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?
Adequately covers the main behaviors (paginated, filtering, user id modes). No output schema, so lacks details on return format, but sufficient for a simple read 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 covers all parameters with descriptions (100% coverage). Description marginally adds context by explaining the default state and public/visible distinction, but mostly reinforces schema content. 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?
Clearly states 'List a user's listings, filtered by state', with specific verb and resource. Distinguishes from sibling tools like get_listing and search_listings. References multiple API variants.
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?
Provides context on when to use each state value and the user parameter format (username vs id). Does not explicitly mention alternatives like search_listings, but gives enough hint for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hide_listingHide listingA
Hide a listing from search; it stays visible on the user profile (POST /listings/:id/hide).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, openWorldHint=true), the description adds that the listing stays visible on the user profile and specifies the HTTP endpoint, but does not mention authentication or reversibility.
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?
Single sentence, front-loaded with the action and key side effect, efficient.
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?
Adequate for a simple mutation with one parameter, but lacks information on error conditions or prerequisites.
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% with description for 'id' as 'Listing id'. The tool description adds no further semantic detail over the schema.
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 description clearly states the action ('Hide a listing from search') and resource ('listing'), and distinguishes it from siblings like delete_listing and unhide_listing by noting that it stays visible on the user profile.
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 implies usage for hiding from search but provides no explicit guidance on when to use vs alternatives (e.g., delete_listing) or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList top-level categoriesARead-only
Return all top-level categories (GET /categories).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description adds minimal behavioral context beyond specifying the GET method. No contradictions.
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?
Single sentence, front-loaded with key information. No extraneous words.
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 parameterless read-only tool with open world hint and no output schema, the description is sufficient. It explains what is returned and the method. Minor missing details like pagination are acceptable given simplicity.
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?
No parameters, schema coverage 100%. The description correctly implies no input parameters. According to guidelines, 0 parameters baseline is 4.
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?
Description clearly states the action ('Return') and resource ('all top-level categories'), with the HTTP endpoint. It distinguishes from sibling tools like get_category and get_category_children which target specific categories or subcategories.
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?
No guidance on when to use this tool versus alternatives. With sibling tools like get_category_children and suggest_category, the description would benefit from a note on scope (e.g., 'use for root categories only').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_citiesList citiesARead-only
Return all cities with their cantons (GET /cities).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds the response shape (cities with cantons) and HTTP method, but does not disclose behavioral traits beyond what annotations imply (e.g., no mention of pagination 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?
Single sentence that efficiently conveys purpose and result. No unnecessary words.
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 zero-parameter list tool with annotations, the description is sufficient: it states what data is returned. Could optionally mention that the list is unfiltered, but 'all cities' already implies that.
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?
No parameters, so schema coverage is 100%. The description adds no parameter information beyond the schema, which is acceptable. Baseline for zero parameters is 4.
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 description clearly states the action: 'Return all cities with their cantons'. It identifies the resource (cities) and scope (all, with cantons). It distinguishes from sibling tools like 'get_city' (singular) and 'get_canton_cities' (filtered by canton).
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?
No guidance on when to use this tool versus alternatives like 'get_canton_cities' for filtering by canton. No mention of prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_countriesList countriesARead-only
Return all countries with id, name and code (GET /countries).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and open-world behavior. The description adds value by specifying the exact fields returned and the HTTP method, which gives the agent a clear expectation of the output format without needing an output schema.
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 description is a single, information-dense sentence that includes the verb, resource, returned fields, and endpoint. No unnecessary words; it is perfectly concise for the tool's simplicity.
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?
Given no parameters, no output schema, and rich annotations, the description is complete. It tells the agent exactly what to expect: a list of all countries with id, name, and code. There is no missing context for correct tool invocation.
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 has no parameters, and the schema coverage is 100% (empty schema). The description does not need to add parameter information. Per guidelines, 0 parameters yields a baseline of 4, and the description fulfills this.
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 description clearly states the tool returns all countries with specific fields (id, name, code) and even provides the endpoint, making the purpose instantly clear. It distinguishes itself from siblings like get_city or list_cities by focusing on countries only.
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?
While no explicit alternatives or when-not-to-use instructions are given, the description is sufficient because there are no sibling tools that list countries, so the usage context is unambiguous. It could benefit from stating that this is the primary tool for country data, but it's not necessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_country_statesList country states / cantonsBRead-only
Return country states with their cantons (GET /country-states).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds no behavioral context beyond restating the HTTP method, so it fails to add value beyond 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?
One concise sentence with no waste. However, it could be more informative while remaining concise.
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 is provided, yet the description does not describe the return structure or any filtering/ordering. This is insufficient for an agent to understand what data is returned.
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?
No parameters exist, and schema coverage is 100%. The description does not need to add parameter details; baseline of 4 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?
Description clearly states it returns country states with cantons, matching the tool name. However, it does not differentiate from sibling tools like list_countries or list_cities, which could cause confusion.
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?
No guidance on when to use this tool versus alternatives such as list_countries or list_cities. The description lacks context for optimal usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_statusLogin statusARead-only
Force a fresh login with the configured credentials and report success. Useful for diagnosing authentication problems.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a mutation ('Force a fresh login') but annotations declare readOnlyHint=true, indicating no side effects. This contradiction is not resolved. The description does not disclose that the operation is actually read-only (if it is) or what 'report success' entails (e.g., return format, side effects on existing session).
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 description is two sentences, front-loaded with the action and followed by usage context. Every word is necessary; 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?
Given the simplicity (no parameters, no output schema), the description covers the basic purpose and a use case. It could be more complete by explaining the return value or what 'fresh login' entails (e.g., whether it invalidates existing session), but it is adequate for a minimal 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?
The tool has zero parameters and the schema coverage is 100%. The baseline score for no parameters is 4, and the description does not need to add parameter details. It adds no confusion.
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 description clearly states it forces a fresh login and reports success, which is a specific action on authentication. This distinguishes it from sibling tools that deal with listings, categories, and other resources.
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 explicitly says 'Useful for diagnosing authentication problems,' providing clear context for when to use it. However, it does not mention when not to use it or alternative tools, but since there are no other authentication-related siblings, this is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_listingPublish listingA
Activate a DRAFT listing so it becomes visible in search (POST /listings/:id/publish).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only (readOnlyHint=false) and may have side effects (openWorldHint=true). The description adds the HTTP endpoint and clarifies the activation effect, but does not detail potential errors or prerequisites beyond draft status.
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?
A single, well-structured sentence that includes the verb, resource, effect, and endpoint. No unnecessary words.
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 simple activation tool with one parameter and no output schema, the description covers the essential purpose, prerequisite, and behavior. Could mention return value or error conditions, but not strictly required.
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 input schema covers 100% of parameter descriptions, with the single 'id' field already documented. The description adds no further semantic meaning to the parameter.
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 description explicitly states the action ('Activate a DRAFT listing') and its effect ('so it becomes visible in search'), using a specific verb and resource. It clearly distinguishes from siblings like create_listing, hide_listing, and finish_listing.
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 implies that the tool should only be used on DRAFT listings, providing clear context. However, it does not explicitly state when not to use it (e.g., if already published) or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_listingRefresh listingA
Bump a listing's rank by refreshing its timestamp (PUT /listings/:id/refresh). Subject to quota — check get_refresh_limits. May consume a paid refresh once the free quota is exhausted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint=false and openWorldHint=true, the description adds important behavioral details: it modifies the listing's timestamp to bump rank, is subject to quota, and may consume a paid refresh. No contradiction with 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?
Two concise sentences: first states the core action, second adds quota context. No fluff; every sentence adds value.
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?
Given the simple single-parameter input and no output schema, the description provides essential context on action and side effects. References another tool for limits, aiding completeness.
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 schema covers 100% of parameters with a clear description for id. The tool description adds no additional parameter meaning beyond the schema, 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?
Description clearly states the action: 'Bump a listing's rank by refreshing its timestamp' and gives the HTTP method. This distinguishes it from siblings like update_listing or publish_listing.
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 mentions quota constraint and directs to check get_refresh_limits. It warns about potential paid consumption, providing context for when to use the tool, though it doesn't explicitly list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch listingsARead-only
Full-text search across OLX listings (GET /search). Public — works without credentials. Combine a text query with filters (category, brand, city, price range, condition, recency). Returns a compact summary per listing plus pagination meta and category aggregations. Set raw: true for the full untrimmed payload. Use extra_params for advanced/rare query keys such as attribute filters (attr, attr_encoded) or custom sorting.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text query, e.g. 'iphone 17' | |
| raw | No | Return the full untrimmed API payload instead of the compact summary | |
| page | No | ||
| state | No | Condition filter id (e.g. 2 = used), per OLX search | |
| city_id | No | ||
| sort_by | No | Sort field, e.g. 'price', 'date' | |
| brand_id | No | ||
| per_page | No | Results per page (default 40) | |
| price_to | No | ||
| price_from | No | ||
| sort_order | No | ||
| category_id | No | Top-level or sub category id | |
| created_gte | No | Recency filter, e.g. '-24 hours', '-7 days' | |
| extra_params | No | Additional query params passed through verbatim, e.g. { attr: '...', attr_encoded: 1 } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds that it returns a compact summary with pagination meta and category aggregations, and that `raw: true` gives full payload. No contradiction.
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?
Four sentences, each serving a purpose: purpose, public access + filter combination, return structure, advanced options. No wasted words. Front-loaded with purpose.
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 14 parameters, no output schema, and nested objects in extra_params, the description covers core functionality and return structure (compact summary, pagination meta, category aggregations). It does not explain all parameter details but provides sufficient context for agent use.
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 has 14 parameters with 57% description coverage. Description groups filters (category, brand, city, price range, condition, recency) and explicitly mentions `q`, `raw`, and `extra_params`. It adds context beyond the schema but does not detail every parameter (e.g., page, per_page, sort).
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 description clearly states 'Full-text search across OLX listings (GET /search)' and lists supported filters (category, brand, city, price range, condition, recency). It distinguishes itself from sibling tools by being the only search tool, while siblings focus on individual listings, categories, etc.
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 'Public — works without credentials' and describes how to combine query with filters. Mentions `raw` and `extra_params` for advanced use. Lacks explicit 'when not to use' or comparisons to alternatives, but context with sibling tools implies usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_listing_discountSet listing discount (PAID/impactful)ADestructive
Set a temporary discounted price on a listing (POST /listings/:id/discount). This changes the live price shown to buyers for the given period. Confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| days | Yes | Discount duration in days | |
| price | Yes | New discounted price |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: it reveals the temporary nature of the discount and that it changes the live price, which aligns with 'destructiveHint: true'. No contradictions with 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?
Two concise sentences, front-loaded with the action and endpoint. No unnecessary words, but could be slightly more structured.
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?
Lacks information about prerequisites (e.g., listing must exist and not already have a discount), expected outcome or return value (no output schema), and error conditions. Adequate for a simple tool but incomplete given the destructive nature.
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?
All three parameters have descriptions in the schema (100% coverage), so the description adds minimal extra meaning beyond the schema. Merely mentions 'temporary discounted price' which is already implied by the price parameter.
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?
Clearly states the action 'Set a temporary discounted price' on a listing, and mentions the HTTP endpoint and impact on live price. However, it does not explicitly distinguish from the sibling 'finish_listing_discount'.
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?
Includes an important instruction 'Confirm with the user first,' indicating a conversational prerequisite. However, it lacks guidance on when to use versus alternatives or any conditions for use (e.g., listing must not already have a discount).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_main_listing_imageSet main listing imageA
Set a listing's primary/cover image (POST /listings/:id/image-main).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| imageId | Yes | Image id to make primary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (write operation). The description adds only the HTTP path, not behavioral details like side effects on previous main image, permissions, or error conditions. Minimal added value.
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?
Single sentence, no redundancy, front-loaded with the core purpose. Efficient and to the point.
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 simple action with two fully described parameters, the description is adequate but does not mention return value or confirmation of success. Could be considered minimally complete.
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 both parameters are fully documented in the schema. The description does not add any additional meaning beyond the schema definitions.
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 description clearly states the action ('set'), resource ('listing's primary/cover image'), and includes the HTTP endpoint, distinguishing it from sibling tools like upload_listing_image.
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 only explains what the tool does but does not specify when to use it over alternatives, nor does it provide prerequisites or context. Usage is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sponsor_listingSponsor listing (PAID)ADestructive
Purchase sponsorship/promotion for a listing (POST /listings/:id/sponsore). THIS SPENDS OLX CREDITS. Call get_sponsor_price first, present the total to the user, and only proceed after explicit confirmation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| days | Yes | Duration in days | |
| type | Yes | Sponsorship type: 0, 1 or 2 | |
| locations | No | Promotion locations, e.g. ["homepage"] | |
| refresh_every | Yes | Auto-refresh interval in hours (0 = none) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description adds critical context: 'THIS SPENDS OLX CREDITS.' This explains the nature of the destructiveness (financial cost), adding value beyond 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?
Two sentences plus a warning, no fluff. Critical information is front-loaded: action first, then mandatory instructions.
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?
Given the destructive nature and missing output schema, the description covers the workflow and side effects well. It could mention the return value, but not strictly necessary.
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 input schema has 100% description coverage, so the baseline is 3. The description does not elaborate beyond schema, missing opportunity to explain sponsorship types or locations.
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 description clearly states the action ('Purchase sponsorship/promotion for a listing') and includes the HTTP method and path. It distinguishes itself from sibling tools like get_sponsor_price by explicitly referencing it as a prerequisite.
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 provides explicit workflow instructions: 'Call get_sponsor_price first, present the total to the user, and only proceed after explicit confirmation.' It also warns about spending credits, guiding appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_categorySuggest category from titleBRead-only
Suggest categories for a listing title/keyword (GET /categories/suggest?keyword=). Handy for auto-selecting a category when creating a listing.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Listing title or keyword |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds the endpoint path but no further behavioral traits such as whether results are cached or limited. Minimal added value beyond 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?
Two sentences without redundancy. The first states the core function, the second provides a usage scenario. Every word contributes meaning.
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 simple tool with one parameter and no output schema, the description covers the purpose and a typical use case. However, it omits details about the response format (e.g., list of category objects), which could help agents interpret results.
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% for the single parameter 'keyword.' The description reiterates that it is a listing title/keyword and shows its use in a URL, adding minor context. 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?
The description clearly states the tool suggests categories based on a title/keyword and provides the endpoint. It distinguishes from siblings by focusing on suggestions rather than listing or fetching specific categories, though not explicitly.
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 mentions being 'handy for auto-selecting a category when creating a listing,' which implies a usage context. However, it does not provide guidance on when not to use it or suggest alternative tools like list_categories for browsing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unhide_listingUnhide listingA
Restore a hidden listing's visibility (POST /listings/:id/unhide).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false (write operation). The description adds the HTTP method (POST) and endpoint, which provides minimal additional context beyond what annotations provide.
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 description is concise: a single sentence of 10 words with no extraneous information. Every word earns its place.
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 simple tool with one parameter and no output schema, the description is adequate. It explains the action and the endpoint, but lacks mention of prerequisites (e.g., listing must be hidden) or error conditions. However, given the tool's simplicity, it is largely complete.
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% for the single parameter 'id', which is described as 'Listing id'. The description does not add new meaning beyond what the schema already provides, so baseline score applies.
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 description uses the specific verb 'Restore' and resource 'hidden listing's visibility', clearly stating the tool's function. It distinguishes itself from the sibling tool 'hide_listing' which does the opposite.
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 implies usage as the inverse of hiding, but does not explicitly state when to use it or provide alternatives. For a simple tool, the context with siblings makes it clear, but explicit guidance is lacking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listingUpdate listingA
Update fields on an existing listing (PUT /listings/:id). Provide only the fields you want to change alongside the listing id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| price | No | ||
| state | No | ||
| title | No | ||
| city_id | No | ||
| brand_id | No | ||
| model_id | No | ||
| available | No | ||
| attributes | No | ||
| country_id | No | ||
| sku_number | No | ||
| category_id | No | ||
| description | No | ||
| listing_type | No | ||
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation and openWorldHint, but the description does not elaborate on potential side effects. It clarifies the PUT method and partial update behavior, which is adequate but not thorough.
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, no fluff, front-loads the purpose and usage pattern. Every word is useful.
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?
Given the high parameter count (15) and no output schema, the description is too minimal. It lacks information about response, validation rules, or handling of nested structures like attributes. Comparable tools likely need more guidance.
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?
With only 7% schema description coverage, the description adds almost no parameter-level detail. It does not explain the meaning of any field beyond the schema's sparse descriptions, failing to compensate for the low coverage.
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 description explicitly states the verb 'Update' and the resource 'existing listing', and includes the HTTP endpoint. It clearly distinguishes from sibling tools like create_listing or delete_listing.
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 specifies partial update semantics ('Provide only the fields you want to change'), guiding the agent on how to construct the request. No explicit when-not-to-use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_listing_imageUpload listing image(s)A
Attach image(s) to a listing (POST /listings/:id/image-upload). Provide either image_url (the API fetches it) and/or an images array of image URLs. Returns the created image objects with their ids and sizes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing id | |
| images | No | Array of image URLs to import | |
| image_url | No | A single image URL to import |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only (readOnlyHint=false). The description adds that it can accept a single URL or an array, and returns image objects with ids and sizes. However, it does not mention error handling, rate limits, or prerequisites (e.g., listing must exist), leaving gaps.
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, no fluff. The first sentence states the core purpose and HTTP path, the second covers input options and output. Perfectly front-loaded.
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?
The description explains the return value (image objects with ids/sizes), but does not mention that the listing must exist or error conditions. For a simple upload, this is nearly complete; minor omission.
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?
Parameter coverage is 100% in schema, and the description merely restates the parameter names and types ('image_url' and 'images' array). It adds no extra semantics beyond the schema, so baseline score of 3 applies.
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 description clearly states the verb ('attach image(s)'), the resource ('listing'), and the HTTP method. It distinguishes from siblings like 'delete_listing_image' and 'set_main_listing_image' by specifying the action.
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?
No explicit guidance on when to use this tool versus alternatives like 'set_main_listing_image' or 'delete_listing_image'. The purpose is implied by the name and description, but no when-not-to-use or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-only
Return the currently authenticated OLX user (GET /me). Also confirms that login and token caching are working.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is clear. The description adds behavioral context by stating it confirms login and token caching, which is helpful. No contradictions.
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 concise sentences with no wasted words. The most important information is front-loaded.
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?
While the description covers the purpose and a secondary benefit, it does not describe the return value structure (e.g., the user object fields). For a tool with no output schema and low complexity, this is adequate but could be more complete.
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?
There are no parameters, and schema coverage is 100%. The description does not need to add parameter info. Baseline for 0 parameters is 4.
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 description clearly states that the tool returns the currently authenticated OLX user, which is a specific verb+resource. It also mentions confirming login and token caching, adding context. Among many listing-related siblings, this is unique for authentication.
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 implies usage for checking authentication status and token validity, providing clear context. However, it does not explicitly exclude any alternatives or mention when not to use it, though the sibling 'login_status' might have overlap. Slight deduction for lack of explicit exclusions.
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.
35 tool updates
v0.1.0- First observed
create_listing - First observed
delete_listing - First observed
delete_listing_image - First observed
find_category - First observed
finish_listing - First observed
finish_listing_discount - First observed
get_canton_cities - First observed
get_category - First observed
get_category_attributes - First observed
get_category_brands - First observed
get_category_children - First observed
get_category_models - First observed
get_city - First observed
get_listing - First observed
get_listing_limits - First observed
get_refresh_limits - First observed
get_sponsor_price - First observed
get_user_listings - First observed
hide_listing - First observed
list_categories - First observed
list_cities - First observed
list_countries - First observed
list_country_states - First observed
login_status - First observed
publish_listing - First observed
refresh_listing - First observed
search_listings - First observed
set_listing_discount - First observed
set_main_listing_image - First observed
sponsor_listing - First observed
suggest_category - First observed
unhide_listing - First observed
update_listing - First observed
upload_listing_image - First observed
whoami
TDQS
Scored across 35 tools
Each tool has a clear, distinct purpose: listing CRUD, images, categories, locations, search, user info, etc. Even with 35 tools, there is no ambiguity; for example, listing lifecycle tools (create, update, publish, finish, hide, etc.) are all uniquely named and described.
Most tools follow a verb_noun pattern (e.g., get_listing, create_listing, upload_listing_image). Minor inconsistencies: 'whoami' and 'login_status' deviate, and some use different ordering (finish_listing vs. finish_listing_discount). Overall, the pattern is recognizable and predictable.
35 tools is on the high side, but they cover a wide range of features for a listing marketplace (CRUD, images, sponsorship, discounts, categories, locations, search). The count is justified by the domain complexity and each tool earns its place.
The tool surface covers the full listing lifecycle and supporting operations: CRUD, image management, refresh, sponsorship, discounts, limits, categories with attributes and brands, location hierarchy, search, and user authentication. No obvious gaps for the stated purpose of managing OLX listings.
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceMCP server for managing OLX.ba / PIK.ba shops, enabling listing management, category/location queries, sponsor operations, and image uploads via natural language.-
- FlicenseAqualityDmaintenanceExposes two MCP tools (discover and execute) that enable agents to query an OpenAPI schema via natural language and execute matched API operations.2-
- AlicenseCqualityBmaintenanceExposes every operation from the meloQA v1 API as MCP tools, enabling LLM clients to read and manage meloQA projects, test cases, cycles, executions, bugs, links, and reference data.834 npmMIT
- AlicenseAqualityBmaintenanceExposes the Loyverse API as MCP tools to manage stores, products, inventory, customers, receipts, and more from AI assistants.54MIT