Teppek
Server Details
Map-first global classifieds marketplace — search and post listings across jobs, real estate, vehicles, and services, on behalf of a signed-in user.
- Status
- Healthy
- Uptime
- 100.0% over 36 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 17 tools
Each tool targets a distinct resource/action: listing CRUD versus lifecycle versus search versus conversations versus images versus entitlements. Potential confusions like search_listings vs semantic_search and send_message vs reply_to_conversation are explicitly differentiated in the descriptions.
Most tools follow a verb_noun snake_case pattern (create_listing, update_listing, list_conversations, purchase_package). Minor deviations like semantic_search instead of search_semantic and list_my_listings break the pattern slightly but do not cause real confusion.
At 17 tools the server is slightly above the typical well-scoped range, but the count is justified by the breadth of the domain: listing lifecycle, dual search modes, conversation management, image uploads, and credit/top-up handling.
The listing lifecycle is well covered: create, read, update, delete, list, renew, and status changes. Search, messaging, image upload, and entitlement checks are also covered; however, the purchase_package description references boost/gold/flare actions that are not exposed as tools, leaving a minor gap.
Available Tools
17 toolscreate_listingAInspect
Publish a listing on behalf of the user across any of the 4 verticals and 12 roles. location must be coordinates ({ lat, lon }) — a free-text address is not accepted, so geocode it first. Publishing consumes credits and requires a free listing slot; get_entitlements reports the current balance and remaining slots. A reached limit makes this return an ACTIVE_LISTING_LIMIT_REACHED error carrying a pay_url. Consumes credits and is held for AI moderation (status starts "pending"); credits are refunded if rejected, EXCEPT for prohibited or spam content, which forfeits the credit. To attach photos, first call request_image_upload for each image and pass the returned keys in images — every image is AI-moderated with the text before going live. Requires the user to be connected to Teppek: an anonymous call returns an AUTH_REQUIRED error with an authorize_url — surface "Connect with Teppek" to the user, then retry.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | The listing role — this alone fixes supply vs demand (do not send intent_type). vehicle_letter = you OWN the vehicle and are renting it OUT (lessor); for a user who WANTS to rent a vehicle use vehicle_renter. Likewise estate_landlord (renting out) vs estate_renter (wants to rent), estate_seller vs estate_buyer, career_employer (posting a job) vs career_seeker (a CV), service_pro (offering) vs service_client (wants a service). | |
| price | Yes | ||
| title | Yes | ||
| images | No | ||
| details | No | ||
| currency | Yes | ISO-4217 currency code matching the listing country (e.g. USD, EUR, GBP, TRY). Required — there is no default, to avoid silently mislabeling non-Turkish listings. | |
| location | Yes | Listing coordinates as { lat, lon }. A free-text address is NOT accepted — resolve it to coordinates before calling. | |
| vertical | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses substantial behavioral traits beyond the minimal annotations: credit consumption, credit refund policy with the prohibited/spam exception, AI moderation with 'pending' status, ACTIVE_LISTING_LIMIT_REACHED error with pay_url, and the AUTH_REQUIRED error with authorize_url. This is rich side-effect and failure-mode disclosure. No contradiction with annotations — readOnlyHint false matches the write operation, idempotentHint false matches credit consumption.
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 long (7 sentences) but every sentence carries distinct, non-redundant information: scope, location constraint, credit consumption, limits, moderation, refund policy, photo workflow, and auth requirement. Critical constraints are front-loaded (purpose, location, credits) before the workflow details. It is dense but efficient, with no filler — the length is justified by the volume of behavioral content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool (9 params, 6 required, nested location object, 2 enums), the description is remarkably complete. It covers prerequisites (entitlements check, image upload), constraints (coordinate location, credit/slot limits), error handling with actionable recovery steps, moderation behavior, and auth requirements. An output schema exists to document return values, so nothing an agent needs to call this correctly is missing.
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 low at 33%, so the description must compensate. It adds genuine value on the images parameter (keys must come from request_image_upload) and reinforces the location constraint (coordinates required, geocode first). The schema already richly documents role (supply/demand pairs) and currency. However, several parameters (price, title, details, description) receive no added meaning in the description beyond the schema, so compensation is partial.
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 a specific verb ('Publish') with a clear resource ('listing') and defines the scope precisely ('across any of the 4 verticals and 12 roles'). It clearly differentiates from sibling tools like update_listing, delete_listing, and set_listing_status by signaling creation of a new listing rather than modification or lifecycle management.
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 gives explicit sequencing guidance: call get_entitlements to check balance/slots before publishing, call request_image_upload for each photo before invoking this tool, and surface 'Connect with Teppek' then retry on AUTH_REQUIRED. It names sibling tools and their role in the workflow. It lacks an explicit 'when not to use' contrast with update_listing, though the create/update name distinction makes this largely self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_listingADestructiveIdempotentInspect
Delete (soft-delete) one of the USER'S OWN listings by listing_id. Only the owner can delete. No credit is refunded — the listing was already published.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description adds important behavioral context: the operation is a soft-delete, only the owner may perform it, and no credit is refunded. This meaningfully enriches what the agent can infer from the annotations alone.
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 filler. The action, scope, permission, and consequence are all front-loaded, making the purpose immediately clear.
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 single parameter, clear annotations, and presence of an output schema, the description covers the essential details: what happens, who may do it, and a key financial consequence. Nothing critical is missing for correct selection and 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 schema provides only the listing_id type and length with no description. The tool description compensates by explaining that listing_id refers to one of the user's own listings, giving the parameter practical meaning and constraints beyond the raw 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 states a specific verb ('Delete') and resource ('one of the USER'S OWN listings') with a clear scope restriction. It also clarifies 'soft-delete', which distinguishes it from permanent deletion and from sibling tools like update_listing or set_listing_status.
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 clearly communicates when the tool should be used: to delete a listing owned by the current user, and only by the owner. It does not explicitly name alternative tools or exclusion conditions, but the ownership and soft-delete context provides solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationAIdempotentInspect
Read one of the user's OWN message conversations by thread_id, including its messages (marks incoming messages read). Only threads the authenticated user participates in are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotent, non-destructive, readOnlyHint=false), the description explicitly discloses a side effect: 'marks incoming messages read'. This is valuable behavioral context that aligns with and enriches the annotation flags, and it also clarifies the access boundary.
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 tightly packed sentences with zero filler. The action and target appear first, followed by the behavioral side effect and the access constraint. Every clause 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?
With an output schema present and only one input parameter, the description covers the essential behavior: what is read, how it is identified, who can access it, and the read-marking side effect. Nothing critical is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that thread_id identifies which conversation to read, but adds little about the identifier's format or where to obtain it. For a single self-explanatory parameter, this is adequate but not comprehensive.
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 opens with the specific verb 'Read' and the resource 'message conversations by thread_id', immediately distinguishing this single-conversation retrieval tool from siblings like list_conversations. It also adds the critical scope qualifier 'OWN' and clarifies it only returns threads the authenticated user participates in.
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 clearly conveys when to use this tool: to read a specific conversation by thread_id. It provides context about ownership and participation constraints, but it does not explicitly name alternatives like list_conversations for listing threads or reply_to_conversation for responding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entitlementsARead-onlyInspect
Check the user's publishing entitlements BEFORE attempting to publish: membership tier, max vs current active listings, remaining slots, wallet credit balance, the per-listing credit cost, and can_create_listing. When the limit is reached the response indicates whether the user can pay from wallet credit or should open checkout (pay_url).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description adds valuable behavioral context beyond that: when the limit is reached, the response indicates whether the user can pay from wallet credit or should open checkout (pay_url). This conditional behavior is transparent and consistent with the read-only annotation.
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. The first sentence front-loads the purpose and the scoped field list, and the second adds the key conditional behavior. Every clause adds value with 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 that an output schema exists, the description need not enumerate every return field. It covers the decision-relevant outputs and the conditional behavior at the limit, and the annotations cover the read-only safety profile. Nothing essential is missing for correct 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 zero parameters, so the schema coverage is effectively 100% and no parameter descriptions are needed. The baseline for a 0-parameter tool is 4, and the description does not attempt to add irrelevant parameter detail.
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 checks the user's publishing entitlements with a specific verb ('Check') and resource ('publishing entitlements'). It lists the exact fields returned (membership tier, slots, wallet balance, etc.), and it is easily distinguishable from sibling tools like create_listing or update_listing because it is explicitly a pre-publish, read-only check.
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 to use it 'BEFORE attempting to publish,' which provides a clear trigger context. It does not explicitly state when not to use it or name alternative tools, but the pre-publish instruction is strong enough to guide correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingARead-onlyInspect
Fetch the full detail of ONE Teppek listing by id — title, description, price/salary, location and the Teppek contact route. Use after search_listings to show, summarize or compare a specific job, home, vehicle or service the user picked.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| price | No | |
| title | No | |
| status | No | |
| currency | No | |
| vertical | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds scope and response contents, plus the contact-route nuance, but doesn't disclose behavior around invalid IDs, stale listings, or how openWorldHint affects results. It adds some value beyond annotations but is not deeply transparent.
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 filler. The core action and scope are front-loaded, and the second sentence provides useful workflow context. 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?
With an output schema present and readOnly/openWorld annotations covering safety, the description supplies the remaining needed context: it names the listing types, the fields returned, and the recommended preceding call. An agent has enough to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single listing_id parameter. It adds only 'by id' and implies the ID comes from search_listings; it doesn't describe the ID's format, origin, or how to recognize a valid one. The parameter is simple, but coverage is low and the description could do more.
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 opens with a specific verb and resource: 'Fetch the full detail of ONE Teppek listing by id'. It lists concrete content (title, description, price/salary, location, contact route) and explicitly scopes the resource to 'job, home, vehicle or service', clearly distinguishing it from list/search siblings.
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 gives explicit workflow guidance: 'Use after search_listings to show, summarize or compare a specific... listing the user picked.' This tells the agent when in the flow the tool belongs and what task it serves. It does not explicitly state when not to use alternative tools, but the contrast with search_listings is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsARead-onlyInspect
List the user's OWN listing-message conversations (threads they started, or received as a listing owner), newest first. Resolved from the authenticated agent key — only ever this user's threads. Use get_conversation to read a thread's messages.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description reinforces this by stating results are 'Resolved from the authenticated agent key' and 'only ever this user's threads.' It also adds useful behavior such as 'newest first' ordering. No contradictions exist, and the added context is helpful beyond the 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 compact and every sentence contributes value: scope and ordering, authentication-bound behavior, and a pointer to the sibling detail tool. It is well-structured and front-loaded with the primary 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, read-only list operation with zero required parameters and an output schema, the description fully covers what the agent needs: scope, ordering, authentication context, and the next-step tool for reading message content. No important guidance is missing.
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 0%, and the description does not explicitly explain limit or offset. However, the parameter names are self-explanatory and the schema provides types, defaults, ranges, and min/max. The 'newest first' ordering statement gives relevant context for pagination. This is minimally adequate, but the description itself does not add significant parameter semantics 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 a specific verb and resource: 'List the user's OWN listing-message conversations.' It further clarifies the scope with 'threads they started, or received as a listing owner' and 'only ever this user's threads,' distinguishing it from simply listing all conversations or listings. It also points to get_conversation as the related read tool.
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 clear usage context by stating this lists only the authenticated user's own conversation threads, and explicitly directs the agent to use get_conversation for reading a thread's messages. It does not explicitly mention when not to use it relative to other siblings like reply_to_conversation or send_message, but the scoping and sibling pointer give adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_my_listingsARead-onlyInspect
List the user's OWN listings (any status), newest first. Resolved from the authenticated agent key — only ever returns this user's listings. Use status='pending' to see what is awaiting moderation, status='rejected' for declined ones.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| status | No | Filter YOUR listings by moderation/lifecycle status. Use "pending" to see what is awaiting AI moderation, "rejected" for declined ones, "all" (default) for everything. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| listings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description adds useful behavior beyond that: authentication-bound resolution, strict scoping to the caller's own listings, and newest-first ordering. This gives the agent an accurate mental model without contradicting 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 tight sentences carry all the essential information with no filler. The most decision-relevant facts, ownership scope and ordering, are front-loaded, and status guidance follows naturally.
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 read-only list tool with pagination parameters, an output schema, and safety annotations, the description covers purpose, scope, ordering, and status semantics. Nothing an agent needs to call it correctly is missing.
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 only 33%, so the description partially compensates by explaining the practical meaning of status values ('pending' awaiting moderation, 'rejected' declined). However, limit and offset are still left to the schema's defaults/constraints, which are self-evident but not semantically enriched.
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 a specific verb ('List'), resource ('the user's OWN listings'), and scope ('any status, newest first'). The explicit ownership boundary distinguishes this from sibling tools like search_listings or get_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?
It clearly explains how to use status filters to view pending or rejected listings, and the 'only ever returns this user's listings' statement signals when this tool is appropriate. It does not explicitly name sibling alternatives, but the ownership scoping is enough routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchase_packageAInspect
Top up the ACCOUNT's credit balance by buying a package with USDC on Base — so you can keep publishing/boosting autonomously instead of stopping to ask the human to open teppek.com/pricing. The agent spends the account's package credits (1 credit = 1 USD) exactly like the human owner; this buys the SAME packages a human buys, just paid on-chain. Use it when create_listing/gold/flare returns 402 (out of credits) or 409 (listing limit). TWO STEPS: (1) call with pack_key only (pro/pro_plus/business) → you get a 402 PAYMENT_REQUIRED carrying { payment: { pay_to, amount_usdc, network: 'base', asset } }; (2) send exactly that much USDC to pay_to from the account owner's wallet, then call again with the SAME pack_key and payment_tx set to the transaction hash → the account is credited and you can retry the original action. NOT a per-listing payment. If it returns 404 AGENT_TOPUP_UNAVAILABLE, autonomous top-up is off — tell the owner to buy a package at the pay_url. A 202 PENDING_CONFIRMATION means the tx is not yet confirmed on-chain — retry shortly with the same payment_tx.
| Name | Required | Description | Default |
|---|---|---|---|
| pack_key | Yes | Which credit package to buy for the ACCOUNT: pro = 90 credits ($90 USDC), pro_plus = 180 ($180), business = 890 ($890). 1 credit = 1 USD. | |
| payment_tx | No | On-chain USDC (Base) transaction hash of your payment. OMIT on the first call to receive the payment instructions (pay_to + amount); then send the USDC and call again WITH payment_tx set to the tx hash to credit the account. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly explains the tool's behavior: the two-step payment flow, the meaning of response codes (202 PENDING_CONFIRMATION, 404 AGENT_TOPUP_UNAVAILABLE), and the account crediting mechanism. It also notes that the agent spends the account's credits, which is crucial context. No contradiction with annotations (readOnlyHint false, destructiveHint false).
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?
Although long, the description is tightly structured and information-dense. It flows logically: purpose, when to use, steps, error handling, and retry guidance. Every sentence carries necessary content, and the structure makes it easy to follow despite its 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?
Given the tool's complexity (two-step payment, external blockchain interaction, potential error states), the description covers all necessary aspects: triggering conditions, procedure, response codes, retry behavior, and fallback instructions. It is complete for an agent to use correctly without additional context.
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 both parameters (pack_key and payment_tx) described in detail. The description adds meaning by explaining the enum values (pro, pro_plus, business) with credit amounts and costs, and by clarifying the role of payment_tx (omit on first call, include on second). This goes beyond the schema's own descriptions.
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: 'Top up the ACCOUNT's credit balance by buying a package with USDC on Base.' It specifies the verb (top up), resource (credit balance), and method (buying a package), and distinguishes it from sibling tools by focusing on credit purchase and when to use it (402/409 errors).
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 when to use: 'Use it when create_listing/gold/flare returns 402 (out of credits) or 409 (listing limit).' It provides a clear two-step procedure, including what to omit on the first call and what to include on the second, plus guidance on retry for pending confirmations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_listingAInspect
Renew one of the USER'S OWN listings — extend its expiry another 30 days (native listings lapse ~30 days after posting). Free — no credit charge. Renewing an expired listing returns it to active; a pending, rejected, sold, or draft listing cannot be renewed.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| listing | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the operation is free, that it adds 30 days, that expired listings become active again, and that pending/rejected/sold/draft listings are ineligible. These are material behavioral details that an agent needs beyond the basic mutating intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences with no filler. The core purpose and constraint are front-loaded, and each subsequent sentence adds a distinct fact: cost, expiration mechanics, and invalid states.
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 an output schema and mutation-related annotations present, the description covers the effect, cost, expiry behavior, and prohibited statuses. Nothing essential for correct invocation is missing.
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 only parameter, listing_id, has no schema description (0% coverage), but the description compensates by requiring it to reference one of the user's own listings and by defining eligibility statuses. It does not explicitly mention the parameter name, but the semantics are clear and sufficient for this simple 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?
Description states a specific action (renew), a specific resource (the user's own listings), and the concrete effect (extends expiry by 30 days). It clearly distinguishes from siblings like create_listing, update_listing, and set_listing_status because renewal has unique semantics around expiry and reactivation.
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 gives clear context for when to use this tool: to renew one of the user's own active or expired listings. It also states which statuses cannot be renewed, but it does not explicitly name alternative tools or conditions where another sibling should be used, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_conversationAInspect
Continue an EXISTING message thread by thread_id — the message goes to the other participant. Use this to follow up in a conversation that already exists, whether the user is the listing owner answering an inquiry or the inquirer following up. For the FIRST message to a listing found in search (you have a listing_id but no thread yet), use send_message instead. Contact routes through Teppek; raw personal details are never exposed. Find thread_id via list_conversations / get_conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The reply to post into the conversation. Contact routes through Teppek; raw personal details are never exposed. | |
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the reply goes to the other participant, contact routes through Teppek, and raw personal details are never exposed. Annotations already indicate this is a mutating, non-idempotent operation, and the description does not contradict them; it could go slightly further by describing behavior on invalid thread IDs, but existing coverage is strong.
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?
Every sentence earns its place: the core operation is front-loaded, the alternative tool is named, and the privacy note plus thread_id source are concise but useful. The description is a bit long, but it is information-dense and well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema present, the description covers the operation, the routing to the right sibling, the meaning of thread_id, and the privacy model. Nothing essential for selecting and invoking the tool correctly is missing.
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 only 50%: body has a schema description but thread_id does not. The description compensates for thread_id by explaining it identifies an EXISTING conversation and telling the agent how to find it. Body semantics are largely left to the schema, which is adequate, though the description could have clarified the body is the reply text.
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 a specific verb and resource: continue an EXISTING message thread by thread_id. It explicitly distinguishes itself from send_message, which is the correct sibling for first messages, so an agent can tell them apart immediately.
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 gives clear when-to-use guidance: use this for follow-ups on existing threads, including both owner and inquirer scenarios. It also names the alternative and the condition for choosing it: first message to a listing with no thread yet should use send_message. It further tells the agent how to find thread_id via list_conversations/get_conversation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_image_uploadAInspect
Get a short-lived upload grant to attach a photo to a listing you're about to publish (any vertical/role). Returns { key, upload_url, upload_token, headers_required }: POST the raw image bytes to upload_url with those headers, then pass the returned key in create_listing's images array. Images are AI-moderated (content safety + consistency with the listing text) before the listing goes live.
| Name | Required | Description | Default |
|---|---|---|---|
| file_size | Yes | ||
| content_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| upload_url | No | |
| upload_token | No | |
| headers_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide low-level hints, so the description carries the disclosure burden. It meaningfully adds that the grant is short-lived, that upload requires POSTing raw bytes with returned headers, and that images are AI-moderated before going live. It stops short of describing expiry details or failure behavior, but it is substantially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler: purpose, usage protocol with returned fields, and a behavioral caveat. The most important information is front-loaded and the rest is directly actionable.
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 two-parameter tool with an output schema, this description is complete enough to invoke correctly: when to call it, what it returns, how to perform the upload, how to integrate with create_listing, and what moderation behavior to expect. The only minor omission, an explicit pointer to the existing-listing flow, is already covered by the clear 'about to publish' framing.
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 0%, so the description should compensate for the two required parameters. It does not explain how content_type and file_size are used, whether they must match the uploaded bytes, or how they affect the grant. The indirect mention of raw image bytes is not enough to replace missing parameter guidance.
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 a specific verb and resource: getting a short-lived upload grant to attach a photo to a listing. It also distinguishes itself from siblings like create_listing and update_listing_images by describing the grant-and-upload flow rather than the listing-creation or image-update flow.
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 clearly frames when to use it: before publishing a listing, for any vertical/role, and it tells the agent to pass the returned key into create_listing's images array. It does not explicitly mention update_listing_images for existing listings, so alternative routing is left somewhat implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsARead-onlyInspect
Find live jobs, homes/rentals, vehicles, or local services NEAR a place or in a city/country on Teppek — use this for natural requests like "jobs near me", "apartments in Berlin", "used cars under 10k in Madrid", "plumbers nearby". Covers 27 countries with fresh, location-aware listings refreshed daily. For MEANING-based or fuzzy natural-language intent (not exact keywords or filters), use semantic_search instead. Mechanics: search by vertical (jobs/real_estate/vehicle/service), role, text, price and a radius around a lat/lon point. The role is the perspective you search AS and returns the COUNTERPARTY listings: to find JOB POSTINGS use role="career_seeker" (NOT career_employer, which searches candidate CVs). A text_query or location is needed — an empty query returns nothing. The response meta.total is the REAL match count (independent of limit); for a multi-word text_query it counts listings matching ANY of the words, so to count a whole occupation/category include its synonyms (e.g. "waiter waitress server"). Use the country field for country-scoped totals. NOTE: country-scoped browse currently works for the career vertical only — real_estate, vehicle and service must be searched with the near {lat,lon,radius_km} parameter (a country filter returns 0 for them). meta.ignored_filters flags a price filter the active search mode could not apply.
| Name | Required | Description | Default |
|---|---|---|---|
| near | No | ||
| role | No | The perspective you search AS — results are the matching COUNTERPARTY listings, not your own side. To browse JOB POSTINGS use "career_seeker" (you act as a job seeker looking for jobs); "career_employer" instead searches candidate/CV listings. Likewise: estate_buyer → properties for sale, estate_renter → rentals, vehicle_buyer → vehicles for sale, vehicle_renter → vehicles for rent, service_client → service providers. Pair with text_query and/or near. | |
| limit | No | ||
| offset | No | ||
| country | No | Optional ISO-3166 alpha-2 country code (e.g. "us", "gb", "de") to scope results to one country and get a real total count for it. Combine with text_query to count/list within a country (e.g. country:"us" + text_query:"waiter"); use country alone (no text_query) to get the total number of listings in that country. | |
| sort_by | No | Optional ordering: "price_asc" = cheapest first, "price_desc" = most expensive first. Use price_asc for "cheapest ..." requests. Omit for the default (most recent first). Currency-naive raw-number sort, so scope by vertical/country when mixing currencies. | |
| category | No | Optional PRECISE occupation/category filter using the source category slug (e.g. "hospitality-catering-jobs" for waiters/chefs/bar, "it-jobs", "retail-jobs"). This is far more accurate than keyword text_query for counting an occupation. With no text_query, the response meta.total is the exact count for that category (optionally + country), and meta.categories lists the available category slugs with counts — call once with country alone to discover them. | |
| vertical | No | ||
| price_max | No | Maximum price/salary. Currency-naive raw-number compare (see price_min). If unapplied it appears in meta.ignored_filters. | |
| price_min | No | Minimum price/salary. CURRENCY-NAIVE: compared as a raw number against the listing price without normalizing currencies, so scope with `country` (or a role/vertical) when mixing regions. If the response cannot apply it, price_min is listed in meta.ignored_filters. | |
| text_query | No | ||
| intent_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, but the description adds substantial behavioral depth: the counterparty role semantics (career_seeker returns job postings, not CVs), the requirement for a text_query or location (empty query returns nothing), the meta.total semantics including multi-word ANY matching, and the meta.ignored_filters flag. These go well beyond the annotation and directly inform correct invocation.
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 long but efficient; every sentence earns its place. It front-loads purpose and usage, then mechanics and caveats. It is structured with clear sections and examples. While not terse, it avoids redundancy and packs essential information, earning a high score rather than a top score for brevity.
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 tool with 12 parameters, a nested near object, and an output schema, the description is remarkably complete. It covers the core search mechanics, role semantics, result counting behavior, country limitations, and ignored filters. The output schema presumably handles return details, so nothing critical is missing for correct 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?
Schema description coverage is only 50%, so the description carries a heavier load. It explains the role parameter in detail, the need for near or text_query, and the country limitation. It does not describe every parameter (offset, limit, intent_type) but the most complex ones are covered. The description adds significant meaning beyond the schema, though it could briefly mention sort_by and intent_type.
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 opens with a precise verb-resource pairing: 'Find live jobs, homes/rentals, vehicles, or local services NEAR a place or in a city/country on Teppek'. It immediately scopes the tool and differentiates it from the sibling by naming semantic_search for 'MEANING-based or fuzzy natural-language intent'. This gives an agent clear, non-overlapping purpose.
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 when to use this tool (natural location/price requests) and when not (semantic_search for fuzzy intent). It provides concrete examples ('jobs near me', 'apartments in Berlin') and a critical exclusion: country-scoped browse works only for the career vertical, with real_estate/vehicle/service requiring the near parameter. No inference is left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchARead-onlyInspect
Semantic (meaning-based) search over Teppek's live listings, backed by a multilingual embedding index. Use it when the user describes what they want in natural language rather than exact keywords — e.g. "outdoor jobs that don't need a degree", "affordable family cars that are good in snow", "a cosy studio close to the university". Returns the closest-matching ACTIVE listings ranked by semantic similarity (each item carries a score). Complements search_listings: prefer search_listings for precise keyword/role/country/category/price filtering and exact counts; prefer semantic_search when meaning, synonyms, or fuzzy intent matter more than literal terms. Optional vertical narrows to jobs/real_estate/vehicle/service.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Natural-language description of what the user wants (e.g. "quiet night-shift jobs that do not need a degree", "cosy family flat near a park"). Matched by MEANING against the listing text, not exact keywords. | |
| vertical | No | Optional vertical filter (career | real_estate | vehicle | service) applied server-side to the active listings before they are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint: true and openWorldHint: true, and the description adds meaningful behavioral context: it returns ACTIVE listings only, ranks by semantic similarity, includes a score per item, uses a multilingual embedding index, and notes that vertical filtering is applied server-side. This goes well beyond the annotations and helps the agent predict behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by vivid examples and decision guidance for the sibling tool. Every sentence earns its place; the length is justified by the rich examples and the important search_listings comparison.
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 that an output schema exists and the annotations cover safety, the description provides all necessary context for selecting and invoking the tool: scope, use cases, alternatives, result ranking, active-listing restriction, score behavior, and optional vertical filter. Nothing important is missing.
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 description adds useful examples and clarifies the meaning-oriented query semantics, but it introduces a potential error: it says vertical narrows to 'jobs/real_estate/vehicle/service' while the schema enum is 'career|real_estate|vehicle|service', so an agent might pass the invalid value 'jobs'. The limit parameter is not mentioned in the description, though its schema constraints make it fairly self-explanatory.
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 opens with a specific verb and resource: 'Semantic (meaning-based) search over Teppek's live listings'. It clearly distinguishes the tool from search_listings by emphasizing meaning-based matching over exact keywords, so an agent knows exactly what the tool does and how it differs from siblings.
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 explicitly states when to use this tool: 'Use it when the user describes what they want in natural language rather than exact keywords'. It also names the alternative and the trade-off: 'prefer search_listings for precise keyword/role/country/category/price filtering and exact counts; prefer semantic_search when meaning, synonyms, or fuzzy intent matter'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageAInspect
START contact with the owner of a Teppek LISTING on the user's behalf (identified by the listing) — the primary FIRST-CONTACT path (there is no price-offer/accept/reject flow). Opens a private thread with the owner; contact routes through Teppek and never exposes raw personal details. To continue a thread that already EXISTS (you have a thread_id from list_conversations), use reply_to_conversation instead. External-feed listings (e.g. imported jobs) have no Teppek owner, so this returns a redirect to the external application URL instead of creating a thread. Requires the user to be connected to Teppek: an anonymous call returns an AUTH_REQUIRED error with an authorize_url — surface 'Connect with Teppek' to the user, then retry.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The message to send to the listing owner. Contact routes through Teppek; raw personal details are never exposed. | |
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false, idempotentHint=false, but the description adds significant behavioral context beyond them: it opens a private thread, routes contact through Teppek without exposing raw personal details, redirects to an external application URL for external-feed listings, and returns an AUTH_REQUIRED error with authorize_url on anonymous calls. This goes well beyond what annotations convey.
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 front-loaded with the core purpose, then each sentence adds a distinct useful item: thread creation, privacy, the reply_to_conversation alternative, external-feed redirect, and auth handling. Despite its length, every sentence earns its place and there is no filler or repetition.
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 meaningful complexity: auth requirements, alternate routing paths, and external redirects, all of which are covered. Since an output schema exists, return-value explanation is unnecessary. The description provides an agent with everything needed to decide when to call it and how to handle common failure/edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is exactly 50%; body has a full description while listing_id has none. The description indirectly clarifies listing_id by saying the tool is 'identified by the listing', which adds some semantic context, but it doesn't describe the parameter format or value constraints beyond what the schema already provides. This is a mid-range score: the schema handles part of the burden and the description handles the rest only lightly.
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 a precise action ('START contact with the owner') on a specific resource (a Teppek LISTING), and explicitly positions it as the 'primary FIRST-CONTACT path'. It also carves out what it is not: 'there is no price-offer/accept/reject flow', plus it names the sibling reply_to_conversation for a different use case, making the tool 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 gives explicit routing guidance: use send_message for first contact, and 'To continue a thread that already EXISTS ... use reply_to_conversation instead.' It also documents external-feed redirects and the auth-required retry flow, so an agent knows exactly when and how to handle edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_listing_statusAIdempotentInspect
Change the lifecycle status of one of the USER'S OWN listings: mark it sold, hide it (take it offline), or re-activate a hidden one. Free — no credit charge. Cannot set moderation states (pending/rejected); re-activating only works on a listing that was previously approved and is currently hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | sold = mark the listing sold/closed; hidden = temporarily take a live listing offline; active = re-show a listing that is currently hidden (only works if it was previously approved). Cannot set moderation states. | |
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| listing | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond those annotations: it is free with no credit charge, cannot set moderation states, and has a specific precondition for re-activation. There is 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?
The description is two dense sentences with no filler. The primary action is front-loaded, followed immediately by cost information, exclusions, and activation preconditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema and informative annotations, the description covers ownership, allowed transitions, disallowed states, cost, and the key edge case for re-activation. The agent has enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The status parameter is well documented in the schema, and the description reinforces the lifecycle semantics. However, listing_id has no description in the schema, and the description does not explain how to obtain or identify the listing ID beyond implying it must be the user's own listing.
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 and resource: change the lifecycle status of the user's own listing. It enumerates the three specific operations (sold, hidden, active) and explicitly excludes moderation states, which distinguishes it from update_listing and moderation-related tools.
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 scopes the tool to the user's own listings and provides concrete conditions: re-activation only works on previously approved, currently hidden listings. It does not explicitly name alternative sibling tools, but the constraints make the appropriate use cases clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listingAIdempotentInspect
Edit fields (title, description, price, currency, location) on one of the USER'S OWN listings, identified by listing_id. Only the owner can edit; vertical/intent_type/role are fixed (publish a new listing to change those). Editing is free (no credit charge). Changing the title, description, or location re-triggers AI moderation (the listing returns to 'pending' until cleared); price/currency-only edits stay live. A price change may be rejected if the listing's price is locked.
| Name | Required | Description | Default |
|---|---|---|---|
| price | No | ||
| title | No | ||
| details | No | ||
| currency | No | ||
| location | No | New listing coordinates { lat, lon }. Moving a listing re-triggers AI moderation — it returns to "pending" until cleared. | |
| listing_id | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| listing | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds value beyond these: editing is free (no credit charge), field-specific moderation re-trigger (returns to 'pending'), price/currency-only edits stay live, and possible rejection when price is locked. No contradiction with annotations; the price-lock rejection is state-dependent, not idempotency-violating.
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 dense paragraph with front-loaded purpose. Every sentence earns its place — ownership constraint, fixed fields, pricing, and side-effects are all valuable. Slightly long, but the complexity of side-effects (moderation, price lock) justifies the 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?
Given the output schema exists, omitting return-value details is acceptable. The description covers the operational essentials: ownership, fixed fields, costing, moderation side-effects, and rejection conditions. The main gap is the undocumented 'details' parameter and a missing hint about set_listing_status/update_listing_images as related mutations, but overall it is near-complete for a complex mutation.
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 only 14%, so the description carries significant burden. It adds behavioral meaning to title/description/location (moderation re-trigger) and price (lock rejection), which helps agents choose values. However, the 'details' parameter is never mentioned, and listing_id semantics are only implied as the identifier — an incomplete compensation for the low schema 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?
States a specific verb (edit) and resource (one of the USER'S OWN listings) with the identifier (listing_id) and the exact editable fields (title, description, price, currency, location). Clearly distinguishable from siblings like create_listing (new) and update_listing_images (images 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?
Provides clear context: only the owner can edit, and vertical/intent_type/role are fixed with an explicit redirect ("publish a new listing to change those"), implicitly routing to create_listing. It notes editing is free (no credit charge) versus likely charged creation, but does not explicitly name sibling alternatives or state when not to edit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_listing_imagesAInspect
Add and/or remove photos on one of the USER'S OWN existing listings (max 6 total). First call request_image_upload for each new image and upload the bytes, then pass the returned keys in add. Adding any image re-triggers AI moderation — the listing returns to 'pending' until the new images are cleared; removing images does not. Free (no credit).
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Image keys from request_image_upload to attach (upload the bytes first). Each newly-added image is AI-moderated with the listing, so the listing returns to "pending" until cleared. Max 6 images total on a listing. | |
| remove | No | Image keys currently on the listing to detach. | |
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| listing | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses a critical side effect: 'Adding any image re-triggers AI moderation — the listing returns to pending until the new images are cleared; removing images does not.' It also reveals cost behavior ('Free (no credit)') and enforces the 6-image cap. This is strong behavioral transparency for a mutating tool.
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 compact and well-organized: it front-loads the core action, then provides the required workflow, then states side effects and cost. Every sentence contributes necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a photo-update tool with an output schema present, the description covers ownership restriction, prerequisites, moderation side effects, and cost. No critical behavioral detail needed to call the tool safely is missing.
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 already documents 'add' and 'remove' with 67% coverage, and the description adds meaningful workflow context by explaining that 'add' expects keys returned from request_image_upload. It also clarifies listing ownership through 'USER'S OWN existing listings'. The un-documented listing_id parameter is partially covered by this ownership framing, but not fully elaborated.
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 a specific verb and resource: 'Add and/or remove photos on one of the USER'S OWN existing listings'. It clearly differentiates this from general listing tools by focusing on photos and ownership, and it sets the max image count. It also references the prerequisite request_image_upload tool, 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 gives explicit usage context: 'First call request_image_upload for each new image and upload the bytes, then pass the returned keys in `add`.' It also clarifies that moderation is triggered only for additions. It does not explicitly name an alternative tool for non-image listing updates, but the guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
purchase_package
16 tool updates
- Changed
create_listing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
delete_listing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" +}
- Changed
get_conversation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
get_entitlements1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
get_listing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" +}
- Changed
list_conversations1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
list_my_listings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "listings": { + "items": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "listings" + ], + "type": "object" +}
- Changed
renew_listing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "listing": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "listing" + ], + "type": "object" +}
- Changed
reply_to_conversation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
request_image_upload1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "headers_required": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "key": { + "type": "string" + }, + "upload_token": { + "type": "string" + }, + "upload_url": { + "type": "string" + } + }, + "type": "object" +}
- Changed
search_listings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } + }, + "required": [ + "data" + ], + "type": "object" +}
- Changed
semantic_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
send_message1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": {}, + "type": "object" +}
- Changed
set_listing_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "listing": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "listing" + ], + "type": "object" +}
- Changed
update_listing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "listing": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "listing" + ], + "type": "object" +}
- Changed
update_listing_images1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "listing": { + "additionalProperties": {}, + "properties": { + "currency": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "url": { + "type": "string" + }, + "vertical": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "listing" + ], + "type": "object" +}
1 tool update
- Added
semantic_search
15 tool updates
- First observed
create_listing - First observed
delete_listing - First observed
get_conversation - First observed
get_entitlements - First observed
get_listing - First observed
list_conversations - First observed
list_my_listings - First observed
renew_listing - First observed
reply_to_conversation - First observed
request_image_upload - First observed
search_listings - First observed
send_message - First observed
set_listing_status - First observed
update_listing - First observed
update_listing_images
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.167 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.