Skip to main content
Glama

create_listing

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.

Input Schema

NameRequiredDescriptionDefault
roleYesThe 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).
priceYesAsking price as a plain number in `currency`, with no separators. For a job, use the salary figure and put the range in details.salary_min and details.salary_max. Example: 950.
titleYesShort headline of the listing, 3-200 characters. Example: "Two-bedroom flat near the river".
imagesNoUp to 6 image keys returned by request_image_upload, uploaded before this call. Example: ["7c9e6679-7425-40de-944b-e07fc1f90ae7"].
detailsNoVertical-specific attributes. Only these exact keys for the listing's vertical are accepted; any other key is rejected with an error. career: organization_name, employment_type, salary_min, salary_max, years_experience. real_estate: property_room_count, m2_gross, m2_net, building_age, floor_number, heating_type, deposit, dues, is_furnished, is_student_friendly, is_credit_eligible, tapu_status. vehicle: brand, model, vehicle_model_year, vehicle_mileage_km, fuel_type, gear_type, color, damage_status, daily_price, deposit. service: service_category. employment_type is one of full_time, part_time, contract, freelance, internship. is_furnished, is_student_friendly and is_credit_eligible are booleans. real_estate also accepts transaction_type (sale, rent or hire). Example: { "brand": "Toyota", "model": "Corolla", "vehicle_model_year": 2021, "vehicle_mileage_km": 40000, "fuel_type": "hybrid", "gear_type": "manual" }.
currencyYesISO-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.
locationYesListing coordinates as { lat, lon }. A free-text address is NOT accepted — resolve it to coordinates before calling. Example: { "lat": 48.85, "lon": 2.35 }.
verticalYesListing category, which must match the role: career (jobs and CVs), real_estate, vehicle or service. Example: "vehicle".
descriptionNoFull listing text, up to 5000 characters. Facts that fit a `details` key belong in details as well. Example: "Bright flat on the third floor, five minutes from the metro."

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  2. Changed9 schema fields changed
    • addedInput schema / properties / description / description
      Added value: +"Full listing text, up to 5000 characters. Facts that fit a `details` key belong in details as well. Example: \"Bright flat on the third floor, five minutes from the metro.\""
    • addedInput schema / properties / details / description
      Added value: +"Vertical-specific attributes. Only these exact keys for the listing's vertical are accepted; any other key is rejected with an error. career: organization_name, employment_type, salary_min, salary_max, years_experience. real_estate: property_room_count, m2_gross, m2_net, building_age, floor_number, heating_type, deposit, dues, is_furnished, is_student_friendly, is_credit_eligible, tapu_status. vehicle: brand, model, vehicle_model_year, vehicle_mileage_km, fuel_type, gear_type, color, damage_status, daily_price, deposit. service: service_category. employment_type is one of full_time, part_time, contract, freelance, internship. is_furnished, is_student_friendly and is_credit_eligible are booleans. real_estate also accepts transaction_type (sale, rent or hire). Example: { \"brand\": \"Toyota\", \"model\": \"Corolla\", \"vehicle_model_year\": 2021, \"vehicle_mileage_km\": 40000, \"fuel_type\": \"hybrid\", \"gear_type\": \"manual\" }."
    • addedInput schema / properties / images / description
      Added value: +"Up to 6 image keys returned by request_image_upload, uploaded before this call. Example: [\"7c9e6679-7425-40de-944b-e07fc1f90ae7\"]."
    • changedInput schema / properties / location / description
      Previous value: -"Listing coordinates as { lat, lon }. A free-text address is NOT accepted — resolve it to coordinates before calling."New value: +"Listing coordinates as { lat, lon }. A free-text address is NOT accepted — resolve it to coordinates before calling. Example: { \"lat\": 48.85, \"lon\": 2.35 }."
    • addedInput schema / properties / location / properties / lat / description
      Added value: +"Latitude in decimal degrees. Example: 48.85."
    • addedInput schema / properties / location / properties / lon / description
      Added value: +"Longitude in decimal degrees. Example: 2.35."
    • addedInput schema / properties / price / description
      Added value: +"Asking price as a plain number in `currency`, with no separators. For a job, use the salary figure and put the range in details.salary_min and details.salary_max. Example: 950."
    • addedInput schema / properties / title / description
      Added value: +"Short headline of the listing, 3-200 characters. Example: \"Two-bedroom flat near the river\"."
    • addedInput schema / properties / vertical / description
      Added value: +"Listing category, which must match the role: career (jobs and CVs), real_estate, vehicle or service. Example: \"vehicle\"."
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {},
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses behavior beyond the annotations: credit consumption, pending moderation status, refund policy with the prohibited/spam exception, image moderation, and two named error contracts (ACTIVE_LISTING_LIMIT_REACHED with pay_url, AUTH_REQUIRED with authorize_url). This is exactly the operational context the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then preconditions, then error paths — a sensible sequence. A few sentences duplicate schema descriptions verbatim (the location/coordinates warning appears in both), which is slight redundancy but defensible for a high-stakes constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers a complex 9-parameter, nested-object, mutation tool end to end: prerequisites, cost model, moderation lifecycle, error branches, and retry path. With an output schema present, no return-value explanation is required, and the soft-error contracts are still spelled out for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3; the description earns above that by adding workflow meaning — location must be geocoded coordinates, and `images` must hold keys returned by request_image_upload in a specific order. It leaves details.* key semantics entirely to the schema, which is reasonable given the schema documents them thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Publish a listing") plus the scope ("on behalf of the user across any of the 4 verticals and 12 roles"), which maps directly to the vertical/role enums. Read against siblings like update_listing or renew_listing, the create semantics are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions and ordering rules: check get_entitlements before publishing, call request_image_upload per image, retry after surfacing "Connect with Teppek". It does not explicitly route an agent away from update_listing/renew_listing when the listing already exists, so it stops short of naming alternatives as exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources