Remote MCP server to run your Atako AI agents: chat, projects, files, integrations and channels.
- Passed: Handshake
- Passed: Tools listed
- Passed: Updated recently
Median latency 132 ms · Last checked
Explore
Evidence for your next connection.
Independent measurements of remote MCP servers. Every observation has a timestamp.
Read-only probesMCP server · Code & DevOps
Agent-accessible map of global supply & demand: jobs, homes, cars & services your AI can act on
1 failed · 8 not measured
Median of successful probes over 7 days
Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.
Tool definitions returned by this server
Independent monitoring
Responded
The server completed its last measured handshake. This is an observation, not a guarantee.
Last checked| Test area | Passed | Failed | Unmeasured |
|---|---|---|---|
ConnectionCan a client connect and discover tools? | 5 | 0 | 0 |
Reliability & speedDoes it respond consistently and quickly? | 0 | 0 | 4 |
Access & authenticationWhat is required to use this server? | 1 | 0 | 2 |
Tool qualityAre the tool definitions usable by an agent? | 4 | 0 | 0 |
Publisher identityCan the publisher be traced to its source? | 3 | 1 | 2 |
Unmeasured means there is not enough evidence to decide. How these checks work
Start using Teppek
Choose your client, copy the configuration, then enable the server in your client’s MCP settings.
Run this command in your terminal, then restart Claude Code.
Claude Code
claude mcp add --transport http teppek https://mcp.teppek.com/mcpCapabilities
Publish a NEW listing on behalf of the user across any of the 4 verticals and 12 roles. Use it only when the user clearly asks to post something — sell or rent out an item or home, advertise a job, publish a CV, offer or request a service. Do not use it to change an existing listing (update_listing, update_listing_images, set_listing_status) or to look for listings (search_listings). Recommended order: get_entitlements → resolve the address to coordinates → optionally request_image_upload and upload each photo → create_listing. `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.
DiscoveredDelete (soft-delete) one of the USER'S OWN listings by listing_id: it leaves the marketplace and cannot be restored through these tools. Use it ONLY when the user clearly asks to delete the listing. If they say "take it down", "pause it" or "I sold it", use set_listing_status (hidden or sold) instead — that is reversible. Ask for confirmation when the request is ambiguous. Only the owner can delete. No credit is refunded — the listing was already published. Returns { success: true } when the listing was deleted.
DiscoveredRead ONE of the user's OWN message conversations by thread_id, including its messages. Use it when the user wants to read a specific conversation ("what did the landlord say?") or before writing a reply that depends on what was said. Side effect: incoming messages in the thread are marked read — for a quick inbox overview or unread counts use list_conversations instead, so messages the user has not seen stay unread. Returns { thread, messages: [...] }; each message has id, sender_name, body, created_at, read_at and is_mine (true = sent by the user). Only threads the authenticated user participates in are returned; any other thread_id returns an error. Get the thread_id from list_conversations, then answer with reply_to_conversation.
DiscoveredCheck whether the user can publish right now. Use it BEFORE create_listing, and whenever the user asks "how many listings can I still post?" or "do I have enough credit?". When you are about to publish, pass the `role` you will use in create_listing and read can_create_for_role — true means go ahead, false means show the user the pay_url instead of attempting the publish; omit `role` for a general overview. Always returns success, membership_key, included (true = listings are covered by the plan), current_active_listings, credit_cost (credits per listing; null when included), wallet_balance, can_pay_from_wallet, can_create_listing and pay_url (set only when the user cannot publish). Paid plans also return max_active_listings and remaining_slots (null = unlimited). The free tier instead caps supply and demand listings SEPARATELY and returns max_active_listings_per_intent, active_supply, active_demand, can_create_supply and can_create_demand — there, can_create_listing is true if EITHER side has room, which is why passing `role` matters: can_create_for_role answers for the side of that role only. Example: role="career_employer" returning can_create_for_role=false with a pay_url means send the user to that link instead of attempting the publish.
DiscoveredFetch the full detail of ONE Teppek listing by listing_id. Use it after search_listings or semantic_search when the user picks a specific result and wants to see, summarize or compare it — e.g. "what is the salary on the second job?", "compare these two flats", "tell me more about that car". Do not use it to browse or count listings (use search_listings); you also do not need it just to show a result list, because search already returns the summary fields. Returns the listing object: id, title, description, price and currency (jobs also carry salary_min/salary_max), vertical, role, status, lat/lon and location_name, vertical-specific `attributes`, images, expires_at, deep_link (the contact or apply route) and the canonical teppek.com `url` the user can open. An unknown or removed id returns an error ("Listing not found") instead of a listing. Read-only and public — no authentication needed.
DiscoveredList the user's OWN listing-message conversations — threads they started about someone's listing, and inquiries they received as a listing owner — newest first. Resolved from the authenticated agent key — only ever this user's threads. Use it when the user asks "do I have new messages?" or "who replied about my flat?", and before replying, to find the thread_id. It has no side effects (nothing is marked read), so prefer it over get_conversation when you only need an inbox overview or unread counts. Returns { threads: [...] }; each thread has id (the thread_id), listing_id, listing_title, counterpart_name, last_message_preview, last_message_at and viewer_state (unread_count, is_listing_owner, is_last_message_mine). Read a thread's full messages with get_conversation. Page with limit/offset.
DiscoveredList the user's OWN listings (any status), newest first. Resolved from the authenticated agent key — only ever returns this user's listings. Use it when the user asks about their own ads — "how are my listings doing?", "is my car ad live yet?", "why was my listing rejected?" — and to look up the listing_id before update_listing, update_listing_images, set_listing_status, renew_listing or delete_listing. Filter with status: 'pending' = awaiting AI moderation, 'rejected' = declined, 'expired' = lapsed (renew it with renew_listing), 'hidden' = taken offline by the user, 'all' (default) = everything. Do not use it to search other people's listings (use search_listings). Returns { success, listings: [...] }, each with id, title, status, price, currency, vertical and the teppek.com url. Page with limit/offset.
DiscoveredUpdate the expiry of one of the USER'S OWN listings (renew it): the listing runs for another 30 days from now (native listings lapse ~30 days after posting). Use it when the user wants to keep an ad running ("extend my listing", "my ad expired, put it back") or when list_my_listings shows it as expired. Renewing an expired listing returns it to active. Do not use it on a pending, rejected, sold or draft listing — the call fails: a pending one only needs moderation to finish, a rejected one needs its content changed with update_listing, and a sold one is closed. Free — no credit charge. Returns { success, listing } with the renewed listing.
DiscoveredReply in 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 — e.g. "tell the buyer the car is still available" or "ask the landlord if I can view it on Saturday". 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. Returns { thread, message }: the message just sent (id, body, created_at) and the updated thread. Requires the user to be connected to Teppek (authenticated); the body limit is 2000 characters, and a sent message cannot be undone.
DiscoveredRequest a short-lived upload grant for ONE image file — step 1 of attaching a photo (any vertical/role). Use it when the user wants a photo on a new listing (then create_listing) or added to an existing one (then update_listing_images) — call it once per image, maximum 6 images per listing. Do not use it when you only have an image URL: it needs the raw file bytes (JPEG, PNG or WebP, up to 10 MB), and it attaches nothing by itself. Returns { key, upload_url, upload_token, headers_required }: PUT the raw image bytes to upload_url with exactly those headers, then pass the returned key in create_listing's `images` array or update_listing_images' `add` array. A key whose bytes were never uploaded fails later with image_not_uploaded. Images are AI-moderated for content safety before the listing goes live. Requires the user to be connected to Teppek (authenticated).
DiscoveredFind 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". Worldwide, 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 (career/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). Always send `role` with text_query: without it the call fails with an error, and vertical alone is not enough. country, category and near work without role; a call with none of text_query, country, category or near returns nothing. Real estate inventory is currently very limited, so an empty real_estate result does not mean the search failed. 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.
DiscoveredSearch Teppek's live listings by MEANING (semantic search 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 career/real_estate/vehicle/service. Returns at most 20 results per call. Requires the user to be connected to Teppek (authenticated): an anonymous call returns an AUTH_REQUIRED error with an authorize_url.
DiscoveredSTART 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.
DiscoveredSet the lifecycle status of one of the USER'S OWN listings — the reversible alternative to delete_listing. Use status='sold' when the user says the item is sold, the job is filled or the home is let; 'hidden' to take a live listing offline for a while ("pause my ad for a week"); 'active' to bring a hidden listing back. Do not use it to extend an expired listing (use renew_listing), to edit content (update_listing), or to force a pending or rejected listing live: moderation states (pending/rejected) cannot be set, and 'active' only works on a listing that was previously approved and is currently hidden. Free — no credit charge. Returns { success, listing } with the listing's new status.
DiscoveredEdit fields (title, description, price, currency, location, details) on one of the USER'S OWN listings, identified by listing_id. Use it when the user wants to correct or change an existing listing — "drop the price to 900", "fix the typo in the title", "the flat now has 3 rooms". Do not use it for photos (update_listing_images), for marking sold or hiding (set_listing_status), for extending the expiry (renew_listing), or to change vertical/intent_type/role — those are fixed, so publish a new listing instead. Only the owner can edit. Editing is free (no credit charge). Price/currency-only edits stay live; changing the title, description, location or details re-triggers AI moderation: the listing returns to 'pending' and is offline until cleared — tell the user this before editing a live listing. Returns { success, listing } with the updated listing and its new status.
DiscoveredAdd and/or remove photos on one of the USER'S OWN existing listings (max 6 total). Use it when the user wants to add, replace or remove photos on a listing that already exists — to replace a photo, remove the old key and add the new one in the same call. Do not use it while publishing a new listing (pass images to create_listing instead) or to change text fields (update_listing). First call request_image_upload for each new image and upload the bytes, then pass the returned keys in `add`; a key with no uploaded file fails with image_not_uploaded. Adding any image re-triggers AI moderation — the listing returns to 'pending' until the new images are cleared. Removing images leaves a live listing live; on a pending or rejected listing it requests a new moderation verdict. Free (no credit). Returns { success, listing } with the updated listing and its status.
DiscoveredRecent measurements
| Checked | Result | Response | Tools |
|---|---|---|---|
| Connected | 138 ms | 16 |