Skip to main content
Glama

listam-mcp

An MCP server for list.am, Armenia's largest classifieds site. It lets Claude (or any MCP client) search listings in every category, read full ad details and track saved searches for new ads.

Unofficial project, not affiliated with list.am. list.am has no public API, so this server reads the public website. Use it for personal, low-volume purposes and respect list.am's Terms of Service.

What you can ask

  • "Find 2-room apartments for rent in Arabkir under $700 a month, owners only, and compare the best five."

  • "Search for a used iPhone 15 under 350,000 AMD and tell me which ads look like the best deal."

  • "Save this search as kentron-rent and tell me tomorrow what's new."

  • "Open ad 24201365 and summarize the pros and cons."

Related MCP server: ss-ge-mcp

Tools

Tool

Description

search_listings

Search any category by text, category, region and price (AMD/USD/EUR/RUB), optionally excluding agencies. Returns compact rows by default; pass full=True for every field.

search_by_url

Run a search URL copied from the browser, keeping every filter list.am supports.

get_filters

A category's own filters (condition, rooms, mileage, transmission...) and their values, for search_listings' extra_params.

get_listing

Full details of an ad: price, attributes, description, seller, images, posted/renewed dates.

get_listings

Full details of several ads in one call (fetched one at a time, throttled) — for checking a handful of candidates at once.

list_categories

Discover category IDs (top level, or the subcategories of a category).

save_search / check_saved_search

Save a search and later get only the listings that are new since the last check.

list_saved_searches / delete_saved_search

Manage saved searches (stored in SQLite).

Tip: get_filters(category_id) returns each category's own filters (rooms, floor, mileage, renovation...) and the param/value to pass in search_listings' extra_params. A multi: true filter accepts more than one value on list.am, but extra_params can only set one value per key — for more than one, apply the filter on list.am in a browser and use search_by_url or save_search with the resulting URL.

Installation

Requires Python 3.10+. The easiest way is uv, which runs the server straight from GitHub:

uvx --from git+https://github.com/<your-username>/listam-mcp listam-mcp --help

Or install it locally:

git clone https://github.com/<your-username>/listam-mcp
cd listam-mcp
pip install -e .

Claude Desktop

Add this to claude_desktop_config.json (Settings → Developer → Edit Config) and restart Claude:

{
  "mcpServers": {
    "listam": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/<your-username>/listam-mcp", "listam-mcp"]
    }
  }
}

Claude Code

claude mcp add listam -- uvx --from git+https://github.com/<your-username>/listam-mcp listam-mcp

Remote (HTTP) mode

listam-mcp --transport streamable-http --host 127.0.0.1 --port 8000
# MCP endpoint: http://127.0.0.1:8000/mcp

Configuration

All settings are optional environment variables:

Variable

Default

Meaning

LISTAM_LANG

en

Site language: en, hy or ru. Some fields (dates, description) are parsed best in en.

LISTAM_MIN_INTERVAL

2.5

Minimum seconds between requests to list.am.

LISTAM_CACHE_TTL

300

Seconds to cache fetched pages.

LISTAM_TIMEOUT

20

HTTP timeout in seconds.

LISTAM_MAX_RETRIES

2

Retries (with growing backoff) after a 403/429 before giving up.

LISTAM_RATES

USD=363.5,EUR=425,RUB=4.3

Approximate AMD per currency unit, used for cross-currency price filters.

LISTAM_DATA_DIR

~/.listam-mcp

Where the saved-search database lives.

LISTAM_USER_AGENT

browser-like UA

User-Agent header.

Development

pip install -e ".[dev]"
pytest
ruff check .

# Debug commands hit the live site and print JSON — handy when list.am changes its HTML:
listam-mcp search "iphone 15"
listam-mcp search --category 56
listam-mcp get 24201365
listam-mcp categories

You can also explore the tools interactively with the MCP Inspector:

npx @modelcontextprotocol/inspector listam-mcp

How it works

src/listam_mcp/
├── server.py    # MCP tools + CLI entry point
├── client.py    # async HTTP client: rate limiting, caching, list.am-only URL guard
├── parsing.py   # HTML → data models (the only place that knows the page layout)
├── storage.py   # SQLite for saved searches and seen listing IDs
├── models.py    # dataclasses returned by tools
└── config.py    # environment-based settings

The parser relies on stable signals (/item/<id> and /category/<id> links, <h1>, og: meta tags and visible text) rather than CSS class names. Each listing also carries its raw card text and attribute lines, so the model can still read the data if a heuristic misses a field. When list.am changes its layout, update parsing.py, refresh the fixtures in tests/fixtures/ and run the tests.

Responsible use

  • Requests are serialized and throttled, and results are cached.

  • Only list.am URLs can be fetched, so the tools can't be used to reach other hosts.

  • Don't use it for bulk data collection, reselling data or contacting sellers at scale.

License

MIT

Available Tools

10 tools
get_filtersA
Read-only

List a category's own filters (condition, rooms, mileage, transmission...) and their values.

Each filter's param is a key to set in search_listings' extra_params (or in a URL for search_by_url/save_search). A "select" filter takes one of options' values. A "range" filter instead has a param/to_param pair for the from/to bounds (e.g. floor-from, floor-to) and no options. A multi: true filter accepts more than one value on list.am, but extra_params can only set one value per key; for more than one, apply the filter on list.am in a browser and use search_by_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
category_idYesCategory ID from list_categories. Works best on a leaf category (e.g. 'Passenger Cars', not 'Vehicles').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only and open-world behavior. The description adds substantial context beyond that: filter types (select, range, multi), the param/to_param pairing for range filters, and the limitation that extra_params can only set one value per key, requiring a browser workaround for multi-value filters.

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

Conciseness5/5

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

The description is dense and front-loaded: purpose first, then the mechanics of filter types and downstream usage. Every sentence earns its place, with no redundant or vague phrasing.

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?

Given a read-only list tool with an output schema and annotations, the description fully equips an agent to call it and use the results. It explains filter structure, the param mechanism, and special cases like multi-value filters, leaving no critical gaps for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the single category_id parameter is already documented in the schema. The main description does not add further meaning or formatting details for this parameter, so baseline 3 is appropriate.

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: 'List a category's own filters ... and their values.' It also distinguishes itself from siblings by explaining that filter params are used in search_listings' extra_params or in a URL for search_by_url/save_search.

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?

Explains the context for using the tool: filter params feed into search_listings, search_by_url, or save_search. It also gives a clear alternative for multi-value filters (use browser + search_by_url). However, it does not explicitly state when to use get_filters versus list_categories or get_listings.

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

get_listingA
Read-only

Get full details of one listing: price, attributes, description, seller, images, dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYesListing ID (e.g. '24201365') or full list.am item URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only, external-fetch nature is covered. The description adds the list of returned facets, which is useful, but says nothing about auth requirements, rate limits, or error behavior for a missing listing.

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

Conciseness5/5

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

One tightly written sentence that front-loads the verb and resource and then lists the payload. No filler, no redundancy with the schema.

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

Completeness4/5

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

With an output schema carrying return values and annotations covering the safety profile, the description only needs to convey purpose and scope, which it does. The only omission is any routing guidance versus the many sibling listing tools.

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

Parameters3/5

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

Schema coverage is 100% and the single 'item' parameter is already documented as a listing ID or full URL. The description adds no syntax, format, or lookup detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Get') plus resource ('one listing') and enumerates the returned content (price, attributes, description, seller, images, dates). The singular 'one listing' implicitly distinguishes it from the sibling get_listings, but the description never names that sibling explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by 'one listing' – an agent can infer this is for fetching a single known listing rather than searching. No explicit when-to-use, when-not, or pointer to siblings like search_listings or get_listings, so guidance is thin.

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

get_listingsA
Read-only

Get full details of several listings in one call (fetched one at a time, throttled).

Use this to check a handful of candidates from a search instead of calling get_listing repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesListing IDs or URLs, e.g. from a search result.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, but the description adds genuinely new operational context: items are 'fetched one at a time, throttled', which warns the agent about latency/rate behavior. It does not, however, say what happens on partial failure or invalid IDs.

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

Conciseness5/5

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

Two short sentences with zero filler; the scope statement comes first and the usage rule second. Every clause earns its place.

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?

For a one-parameter batch read with an output schema, the description supplies the usage rule and the throttling caveat, which is everything an agent needs. Return-shape explanation is correctly omitted since an output schema exists.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter is fully documented in the schema ('Listing IDs or URLs, e.g. from a search result'), so the description adds no syntax or format detail beyond the word 'listings'. Baseline 3 applies when the schema carries the semantics.

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 ('Get full details of several listings') plus the batching scope ('in one call'), which cleanly separates it from the singular sibling get_listing. An agent can pick it without inspecting the 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?

Explicitly names the alternative it replaces ('instead of calling get_listing repeatedly') and the triggering condition ('check a handful of candidates from a search'), so the selection rule is unambiguous.

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

list_categoriesA
Read-only

List list.am categories (ID and name). Pass a category_id to see its subcategories.

ParametersJSON Schema
NameRequiredDescriptionDefault
category_idNoParent category ID. Omit for the top-level categories.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety and network profile. The description adds the hierarchical listing behavior but says nothing about pagination, limits, or return ordering. Adequate but not rich.

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

Conciseness5/5

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

Two short sentences, the core listing behavior front-loaded and the parameter effect second. Zero wasted words.

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

Completeness4/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, and the tool has a single optional parameter. The description covers what is listed and how the parameter alters scope; only minor operational details (ordering, item limits) are absent.

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 the baseline is 3, but the description goes beyond the schema field text by explaining that a category_id switches the call from top-level categories to that category's subcategories, clarifying the semantic effect of the parameter.

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?

The description names a specific verb (List) and resource (list.am categories) and even states what is returned (ID and name). No sibling tool handles categories, so an agent can select this without opening the schema.

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?

It gives a clear conditional: pass a category_id to get subcategories, omit it implicitly for top-level. There is no explicit when-not or named alternative, but the sibling set contains no competing category tool, so the guidance is sufficient for correct invocation.

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

list_saved_searchesB
Read-only

List saved searches with their last check time.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The description adds the useful detail that each entry carries a last check time, but says nothing about ordering, volume, or whether unchecked searches are included.

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?

A single front-loaded sentence with no filler or redundancy. It is appropriately sized for a simple read tool, though it is terse enough that nothing beyond the bare minimum is conveyed.

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

Completeness4/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-value detail need not be repeated here, and with zero parameters there is little else to cover. The definition is complete enough to call correctly, missing only routing guidance relative to its siblings.

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?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. Schema coverage is 100% and the empty argument object matches the description's no-argument framing.

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

Purpose4/5

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

States a specific verb+resource (list saved searches) and adds the returned attribute (last check time). It does not distinguish itself from siblings like check_saved_search or get_listings, which is where a 5 would require explicit differentiation.

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

Usage Guidelines2/5

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

There is no indication of when to use this versus the closely related check_saved_search, save_search, or delete_saved_search siblings, and no prerequisites or exclusions are given. Usage must be inferred entirely from the name.

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

search_by_urlA
Read-only

Fetch results for an existing list.am search URL, keeping all its filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesA list.am search/category URL, e.g. copied from the browser with filters applied.
fullNoReturn every field instead of compact rows.
limitNo
max_pagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-access profile are covered. The description adds one useful behavioral fact — filters in the URL are preserved — but says nothing about pagination (limit/max_pages), row compaction, or failure behavior on malformed URLs.

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

Conciseness5/5

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

One short sentence, front-loaded with the action and resource, and every word earns its place. No redundancy with the schema or annotations.

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

Completeness3/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 not be explained, and annotations cover the read/open-world profile. Still missing are pagination semantics for limit and max_pages and any hint about how URL-embedded filters interact with those caps, which matters for a 4-parameter tool.

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

Parameters3/5

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

Schema description coverage is 50%: url and full are documented, while limit and max_pages have no descriptions anywhere. 'Keeping all its filters' reinforces what the url parameter does, but the description does not compensate for the two undocumented pagination parameters.

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

Purpose4/5

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

The description states a specific verb (fetch) and resource (results for a list.am search URL) and adds the key qualifier 'keeping all its filters', so an agent understands this replays a saved URL rather than building a new query. It does not name search_listings as the alternative, but the URL-driven distinction is evident.

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

Usage Guidelines3/5

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

Usage is only implied: 'an existing list.am search URL' tells the agent it needs a ready-made URL, which implies this is for replaying a search rather than constructing one. It never states when to prefer this over search_listings or get_listings, nor what happens without a valid list.am URL.

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

search_listingsA
Read-only

Search list.am listings in any category.

Price filters are applied locally to the fetched pages using approximate exchange rates, so fetch more pages when filtering heavily.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoReturn every field (images, seller badges, raw card text) instead of compact rows.
pageNoResult page to start from (only with category_id).
limitNoMax listings to return.
queryNoFree-text search, e.g. 'iphone 15' or 'toyota camry'.
currencyNoCurrency of price_min/price_max: AMD, USD, EUR or RUB.AMD
max_pagesNoHow many result pages to fetch (each ~1.5s).
price_maxNoMaximum price in `currency`.
price_minNoMinimum price in `currency`.
region_idNolist.am location ID. Yerevan districts: {'Ajapnyak': 2, 'Arabkir': 3, 'Avan': 4, 'Davtashen': 5, 'Erebuni': 6, 'Kanaker-Zeytun': 7, 'Kentron': 8, 'Malatia-Sebastia': 9, 'Nor Nork': 10, 'Nork-Marash': 11, 'Nubarashen': 12, 'Shengavit': 13}.
category_idNolist.am category ID from list_categories. Omit to search all categories.
extra_paramsNoRaw list.am URL query params. See get_filters for a category's own filters.
exclude_agenciesNoDrop ads marked as posted by an agency.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and openWorldHint=true. The description goes beyond that by disclosing that price filters are applied locally with approximate exchange rates — a non-obvious behavioral trait that explains result imperfection and motivates max_pages tuning.

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

Conciseness5/5

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

Two tight sentences, purpose front-loaded, followed immediately by the one caveat that changes how an agent should call it. No filler.

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

Completeness4/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, and all params are documented in the schema. The description covers the key non-obvious behavior; only sibling routing is missing for a 12-param open-world search tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all twelve parameters thoroughly. The description reinforces the price_min/price_max semantics by explaining local application and approximate rates, but adds no format or syntax detail. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Search list.am listings') plus scope ('in any category'), so the agent knows exactly what it does. However, it never distinguishes itself from the sibling get_listings or search_by_url, which an agent facing nine sibling tools would need.

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

Usage Guidelines3/5

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

It implies when to use it via the note about fetching more pages when filtering heavily, which is actionable operational advice. But there is no explicit when-not guidance or any routing to alternatives such as search_by_url or get_filters.

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. 10 tool updatesv0.1.0
    • First observedcheck_saved_search
    • First observeddelete_saved_search
    • First observedget_filters
    • First observedget_listing
    • First observedget_listings
    • First observedlist_categories
    • First observedlist_saved_searches
    • First observedsave_search
    • First observedsearch_by_url
    • First observedsearch_listings

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation4/5

Tools are largely distinct by resource+action. The main potential confusion is between get_listing and get_listings, and between search_listings and search_by_url, but descriptions explicitly clarify when to use each (bulk vs single, native filters vs existing URL).

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern (get_listing, list_categories, save_search, delete_saved_search, etc.). Singular/plural variants are intentional and clear.

Tool Count5/5

Ten tools is well-scoped for a listing-site client: search, detail retrieval, metadata helpers, and saved-search lifecycle. Each tool maps to a distinct user workflow without excess.

Completeness4/5

The surface covers search (two modes), listing details (single and bulk), categories, filters, and saved-search CRUD. Minor gap: no direct way to update an existing saved search's parameters (must delete and recreate), but core read workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A read-only MCP server that gives LLM agents live access to OpenSooq, the largest classifieds marketplace in Kuwait, enabling search, pricing, seller reputation, and deal finding.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables searching and browsing ss.ge real estate listings with filters, counters, full card details, and geo/city data via MCP tools.
    6
    45 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables querying livo.ge real estate listings through MCP, including search, listing details, geo lookups, reference dictionaries, and new development projects.
    7
    10 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables searching Moldova's largest classifieds board from an AI client without an account or API key, covering listings such as apartments, cars and phones with category, filter, price and currency controls. Also retrieves full ad details, photos as visible images, seller profiles and phone numbers, dependent options like city sectors or car models, and 999.md's own price statistics.
    4
    8
    MIT