arabam-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@arabam-mcpShow me used BMW 3 Series listings on arabam"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
arabam-mcp 🇹🇷
mcp-name: io.github.mohammad-abbasi-sh/arabam-mcp
Unofficial read-only MCP server for arabam.com, Türkiye's used-car marketplace (~176k listings) — live search, full listing details with the 19-field spec table, brand/model browser, and market price stats.
Built by Mohammad Abbasi as part of the "Turkey MCP factory" (Sepehr-style pipeline). Not affiliated with arabam.com.
For AI agents
Add to your MCP client config (stdio):
{
"mcpServers": {
"arabam": {
"command": "uvx",
"args": ["arabam-mcp"]
}
}
}Or run locally: python -m arabam_mcp.server (needs mcp<2, httpx).
Related MCP server: Webmotors
Tools
Tool | Description |
| Search listings — |
| Full detail of one listing (URL from search): price + 19-field spec table |
| All ~77 brands with listing counts and URL slugs |
| Models of a brand (e.g. "bmw") with counts and slugs |
| Market stats: min/max/median/average TRY price over N pages |
Example output (arabam_search / bmw 3-serisi):
{"brand": "", "model": "bmw-3-serisi", "page": 1, "count": 20,
"listings": [{"id": "45288789", "title": "214 BİN KMDE SORUNSUZ A4 TDI",
"brand": "Audi", "year": 2019, "km": 214000, "price_try": 789900,
"url": "https://www.arabam.com/ilan/.../45288789"}]}Example output (arabam_listing_detail):
{"title": "Galeriden Honda Civic 1.4 S 1998 Model …", "price": 425000,
"price_currency": "TRY", "price_text": "425.000 TL",
"specs": {"Marka": "Honda", "Seri": "Civic", "Model": "1.4 S",
"Yıl": "1998", "Kilometre": "330.000 KM", "Vites tipi": "Düz",
"Yakıt tipi": "LPG & benzin", "Kimden": "Galeriden", …}}Notes:
Data comes from arabam.com's public server-rendered pages (schema.org Vehicle/Car JSON-LD + spec table) — no key, no login, read-only.
Spec-table labels are Turkish (Marka, Seri, Model, Yıl, Kilometre, Vites tipi, Yakıt tipi, Kasa tipi, Renk, Motor hacmi, Motor gücü, Çekiş, Kimden…).
Requests are spaced ~0.8s apart to stay polite.
Environments behind an MITM proxy: set
SSL_CERT_FILEto a CA bundle that trusts the proxy.
Development
python3 -m venv .venv && .venv/bin/pip install "mcp<2" httpx pytest
.venv/bin/python -m pytest tests/ -qtests/test_listings.py— offline, parses real captured fixturestests/test_live.py— 5 cautious live requests against arabam.com (needsSSL_CERT_FILEbehind the lab proxy)
License
MIT
Available Tools
5 toolsarabam_list_brandsA
All ~77 car brands on arabam.com with listing counts and URL slugs (use the slug with arabam_search / arabam_list_models).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the behavioral burden. It does disclose the payload shape (counts and slugs for the entire brand set, no arguments needed), which implies a complete, side-effect-free enumeration, but it never states data freshness, whether counts are site-wide totals, or result ordering/pagination.
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 sentence that front-loads the core fact (all ~77 brands with counts and slugs) before the actionable parenthetical. No filler, no restatement of the tool name.
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, the description need not document return values, and for a parameterless catalog listing it covers scope and downstream usage adequately. The only minor gap is freshness/ordering of the counts, which mildly matters for an agent deciding whether to trust them.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The mention of slugs is about downstream use, not about any argument.
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?
Names the resource (car brands on arabam.com), the scope (~77, i.e. the full catalog), and exactly what each entry carries: listing counts and URL slugs. An agent can distinguish it immediately from arabam_search, arabam_list_models, and arabam_listing_detail 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical gives explicit downstream routing: take the slug and pass it to arabam_search or arabam_list_models, which establishes this as the prerequisite lookup step. It does not state exclusions (e.g. don't call this if you already have a brand slug), so it stops just short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arabam_listing_detailA
Full detail of one listing: title, price, 19-field spec table (Marka, Seri, Model, Yıl, Kilometre, Vites, Yakıt, Renk, Motor, hasar kaydı, Kimden…), images. url: the listing URL from arabam_search.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose what content comes back and that a spec table plus images are included, which is meaningful behavioral context; however it says nothing about auth requirements, rate limiting, failure modes for expired/removed listings, or whether the call is a read-only scrape. With an output schema present, the return-value gap is forgivable, but the operational gaps remain.
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 sentence front-loads the primary purpose, the parenthetical spec table documents scope economically, and the trailing parameter note is separated by a colon. No filler or redundant restatement of the tool name.
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 one-parameter retrieval tool with an output schema, the description supplies the essentials: what is returned, how much structure to expect, and where the url comes from. The main missing piece is robustness guidance around invalid or stale listing URLs, which matters for a scraper-style detail endpoint.
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 only parameter is undocumented in the schema, yet the description compensates by stating the parameter's meaning and its source ('the listing URL from arabam_search'), which tells the agent the expected format and provenance. It stops short of giving an example URL shape or saying whether relative paths are accepted.
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 framing ('Full detail of one listing') and then enumerates the returned content (title, price, 19-field spec table, images), which clearly separates it from arabam_search's multi-result listing behavior. It never names the sibling tools as alternatives directly, but 'one listing' plus the url-provenance note makes the distinction inferable.
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 clause 'url: the listing URL from arabam_search' establishes the intended workflow: search first, then fetch detail for a single result. There is no explicit when-not guidance (e.g., do not call for bulk listing data) and no statement of what happens if the URL is invalid, but the context for use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arabam_list_modelsA
Models of one brand with listing counts and URL slugs. brand: slug like "bmw" (from arabam_list_brands).
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the behavioral burden. It usefully discloses what the response contains (listing counts and URL slugs), but says nothing about error behavior for unknown slugs, pagination, or whether models with zero listings appear. Since an output schema exists, not explaining the return shape is a smaller gap, keeping this at a 3.
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 short sentences with no filler; the output contents come first and the parameter guidance second, which is a sensible front-loading. The clipped noun-phrase opening is efficient rather than wasteful, though slightly more explicit phrasing would still fit within this 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?
For a single-parameter read tool with an output schema, the description covers purpose, the parameter's format and provenance, and the gist of the return data. Remaining gaps (error behavior, whether counts reflect active listings) are minor relative to the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description has to define the only parameter, and it does: the value is a slug in the form "bmw", obtained from arabam_list_brands. This prevents the common mistake of passing a display name like "BMW". It does not specify case sensitivity or what happens on an invalid slug.
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 names the resource (models) and constrains it to a single brand, and it also previews the payload (listing counts and URL slugs). It is distinguishable from the sibling arabam_list_brands because that tool is named as the source of the brand slug. It falls short of a 5 only because the phrasing is a noun fragment rather than stating the operation directly.
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 parenthetical '(from arabam_list_brands)' gives an explicit prerequisite and workflow step: call the brands tool first to obtain a slug. There is no statement of when not to use it or of alternatives such as arabam_search for cross-brand lookup, so the guidance is not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arabam_price_statsA
Market stats for a brand/model: count, min, max, median and average price (TRY) across the first N search pages (pages: 1..5, default 3).
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | ||
| model | No | ||
| pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that results are computed over the first N search pages (1..5, default 3) and what metrics are returned, but it does not describe read-only safety, data freshness, performance/cost, or behavior when pages exceed available results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that packs metrics, scope, page range, default, and currency with no filler.
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 output schema covers the returned statistics, and the description explains page scope and computed metrics. Still, for a tool with no annotations and 0% schema parameter descriptions, the missing brand/model optionality leaves an agent to infer important invocation behavior.
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 0%, so parameter meaning must come from the description. It adds the useful pages constraint (1..5, default 3) and frames brand/model as filters, but it does not explain that brand/model default to empty strings or how empty values affect scope, leaving key semantics to inference.
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 aggregation ('Market stats') over a brand/model and enumerates the exact metrics: count, min, max, median, and average price in TRY. This clearly differentiates it from sibling search, listing-detail, brand-list, and model-list 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 aggregation purpose implies use when summary price statistics are wanted rather than individual listings, but it never explicitly contrasts with arabam_search or states when not to use it. It also omits whether brand/model can be blank.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
arabam_searchA
Search used-car listings. brand: slug like "bmw" (optional), model: slug like "bmw-3-serisi" (optional, overrides brand), page: 1..50. Returns compact listings with id, title, brand, year, km, price_try and detail URL.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| brand | No | ||
| model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full behavioral burden. It does disclose that results are "compact listings" rather than full records, and it enumerates the returned fields, which tells the agent to expect a summary shape. It says nothing about permissions, rate limits, result count per page, or what happens beyond page 50 (the range is given but not the failure mode), so the mutation/safety profile is left implicit.
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 dense sentences with the resource and return shape front-loaded, then per-parameter notes. Nothing wasted, though the terse shorthand ("page: 1..50") reads more like a schema comment than prose. The trailing sentence partly restates what the output schema already declares.
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 three-optional-parameter search tool with an output schema, the description covers filters, precedence, pagination bounds and result shape, which is nearly everything an agent needs to invoke it. Since an output schema exists, the field enumeration is redundant-but-harmless rather than compensating. Missing only edge-case behavior for empty filters or out-of-range pages.
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 has to compensate, and it largely does: it gives slug examples for brand ("bmw") and model ("bmw-3-serisi"), marks both optional, defines the brand/model precedence, and bounds page to 1..50. The only gaps are the default values (empty string, page 1) and whether slugs must match exactly, which remain unstated.
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 and resource: "Search used-car listings." That is clearly distinct from the read-one sibling (arabam_listing_detail), the enumeration siblings (arabam_list_brands / arabam_list_models) and the aggregate sibling (arabam_price_stats). It stops short of naming those siblings, so the differentiation comes from the resource rather than an explicit contrast.
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?
Usage is implied rather than stated: filter by brand or model, paginate with page. The parenthetical "(optional, overrides brand)" is a genuine usage rule that tells the agent model subsumes brand, which is valuable. However, there is no when-to-use vs alternatives guidance, no mention of arabam_listing_detail for full records, and no guidance on what to do when neither filter is supplied.
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.
5 tool updates
v0.1.0- First observed
arabam_list_brands - First observed
arabam_list_models - First observed
arabam_listing_detail - First observed
arabam_price_stats - First observed
arabam_search
TDQS
Scored across 5 tools
Each tool has a distinct role: listing search, single-listing detail lookup, brand enumeration, model enumeration, and aggregate price statistics. The descriptions explicitly cross-reference slug sources and URL inputs, leaving little room for misselection between search and stats or between brand and model listing.
All tools share a consistent 'arabam_' prefix and are readable, but the suffix conventions mix verb_noun (arabam_search, arabam_list_brands, arabam_list_models) with noun phrases (arabam_listing_detail, arabam_price_stats). This is a minor deviation rather than a source of confusion.
Five tools is a tight, well-scoped surface for a read-only used-car browsing domain: taxonomy discovery, search, detail, and pricing analytics. Every tool clearly earns its place with no redundant entries.
The surface covers the core read-only lifecycle: discovering brands/models, searching listings, fetching full details, and computing price stats. Minor gaps exist—no location/city filtering, sorting controls, or seller/contact lookup—but agents can work around these with the current tools.
Maintenance
Related MCP Connectors
Search and read public data from X/Twitter, Reddit, YouTube, Instagram, TikTok, Facebook, Threads, Bluesky, Trustpilot, Amazon, Google Maps, news, forums and the web. 90+ read-only tools plus ready-made research playbooks (lead finding, brand monitoring, review mining). Hosted: connect with an API key; 50 free requests per endpoint each month.
Web data for agents. Extract web pages, crawl websites, discover URLs, and search the web.
Live web access for agents: scrape, SERP search, crawl/map, 100+ collectors, datasets, proxies.
Public web data as clean JSON for AI agents: Google, Amazon, TikTok, Instagram, YouTube, LinkedIn, Google Maps, Reddit, Zillow and hundreds more websites. One API key, pay per call, failed calls are free.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables users to search for vehicles and retrieve detailed listing information from the Turbo.az automotive marketplace. It supports advanced filtering by make, model, price, and other specifications through natural language queries.4-
- AlicenseNot gradedqualityCmaintenanceEnables searching vehicle listings on Brazil's largest automotive marketplace, with full ad details (specs, photos, seller) and average market price for a model.MIT
- AlicenseAqualityCmaintenanceEnables searching over 1.8 million live Brazilian used-car and motorcycle listings with FIPE reference prices and market analytics, and provides per-listing tools for valuation, market position, and price distribution.17MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search and inspect Bama's Iranian car, motorcycle, and truck listings, compute asking-price statistics, browse new-car price lists and dealer inventories, and retrieve specs, ratings, and market trends without an API key.124MIT