Skip to main content
Glama
This connector has been deprecated

Replaced by Teppek.

Duplicate listing. Use the main Teppek connector.

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 needs a free listing slot and may consume credits (included listings cost none); get_entitlements reports the slots, credit cost and balance. A reached limit makes this return an ACTIVE_LISTING_LIMIT_REACHED error carrying a pay_url. Held for AI moderation (status starts "pending"); any credits spent 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, upload the bytes, and pass the returned keys in images — a key with no uploaded file fails with image_not_uploaded, and 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. Changed14 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • 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.\""
    • removedInput schema / properties / details / additionalProperties / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "boolean"
      -  }
      -]
    • addedInput schema / properties / details / additionalProperties / type
      Added value: +[
      +  "string",
      +  "number",
      +  "boolean"
      +]
    • 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\"."
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {},
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Discloses behavior well beyond the annotations: moderation hold with status "pending", credit refund policy including the prohibited/spam forfeiture exception, the ACTIVE_LISTING_LIMIT_REACHED error carrying a pay_url, and the image_not_uploaded failure mode. None of this is derivable from destructiveHint=false / openWorldHint=true, and nothing contradicts those hints.

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?

Purpose and the location constraint are front-loaded, and every sentence carries information an agent needs (entitlements, moderation, refunds, image flow, auth). It is dense and slightly run-on across the credits/moderation sentences, but there is no filler to cut.

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?

An output schema exists, so return values need no explanation, yet the description still covers error paths, moderation lifecycle, and the auth prerequisite. For a 9-parameter, nested-object, non-idempotent write tool this is complete enough to call correctly on the first attempt.

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 100%, so baseline is 3; the description still adds workflow-level meaning the schema cannot — that `location` takes coordinates only and must be geocoded first, and that `images` keys must come from request_image_upload with bytes already uploaded. It adds less on `details` and `price`, but the cross-tool parameter dependencies are genuinely extra value.

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?

Opens with a specific verb+resource ("Publish a listing") plus scope (4 verticals, 12 roles), which cleanly separates it from update_listing, renew_listing, and set_listing_status. An agent can identify the create-path tool without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit preconditions and named alternatives: geocode before calling because free-text addresses are rejected, call get_entitlements to check slots/credits, call request_image_upload before passing `images`, and surface authorize_url before retrying on AUTH_REQUIRED. This is a full when-and-with-what sequence, not just a hint.

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