{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T19:28:29.006Z","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp","markdownUrl":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp.md","server":{"slug":"sepehr071-sheypoor-mcp","name":"Sheypoor Classifieds","registryName":"io.github.sepehr071/sheypoor-mcp","description":"Read-only Sheypoor (sheypoor.com) classifieds: search ads, ad details, price summaries.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"sheypoor-mcp","type":"pypi","identifier":"sheypoor-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp","version":"0.1.0","transport":"stdio","scoredAt":"2026-11-05T03:15:35.199Z"},"score":{"total":79,"tier":"medium","status":"scored","weekDelta":null,"history":[{"date":"2026-11-05","total":79},{"date":"2026-11-04","total":79},{"date":"2026-11-03","total":64},{"date":"2026-11-02","total":79},{"date":"2026-11-01","total":64}]},"categories":[{"name":"Supply Chain Security","score":100,"verdict":"partial","reasons":["No malware found by supply-chain analysis.","No known CVEs affecting this package version or its production dependencies.","Runs hatchling.build at install time, a recognised build step with no custom scripting around it.","1 of 35 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.none","args":{}},{"code":"installscript.allowlisted","args":{"tool":"hatchling.build","hooks":"build_backend"}},{"code":"dephealth.assessed","args":{"deps":"35","unhealthy":"1"}}]},{"name":"Provenance & Transparency","score":97,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Cryptographically verified build provenance (signed, bound to sepehr071/sheypoor-mcp).","Clear OSI-approved license (MIT).","Actively maintained (last published 3 days ago).","Disclosure check failed: no security disclosure policy was found in the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.verified","args":{"repo":"sepehr071/sheypoor-mcp"}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"3"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":62,"verdict":"fail","reasons":["AI-judged instruction clarity (excellent).","Context-footprint check failed: tool/resource definitions use about 3197 tokens (~290/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_heavy","args":{"avg":"290","items":"11","tools":"11","tokens":"3197","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":100,"verdict":"pass","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","100% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"11"}},{"code":"toolsafety.manipulation_clean","args":{"units":"12","judged":"12"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"malware":[],"components":[{"slug":"sheypoor-mcp","type":"pypi","identifier":"sheypoor-mcp","withdrawn":false,"score":79,"current":true,"url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp","markdownUrl":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp.md"}],"facts":[{"label":"Registry","value":"pypi"},{"label":"Package","value":"sheypoor-mcp"},{"label":"Version","value":"0.1.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"sp_search","title":"Search ads","description":"Search Sheypoor classified ads (cars, real estate, goods, jobs, services) by words, city, category and price.\n\nUse it to find ads or see what is on sale; call sp_ad with an ad `id` for the full text, seller and all\nattributes. Slugs come from sp_cities and sp_categories; for attribute filters (year, brand, colour, gearbox,\narea...) call sp_filters first. `price` is in Toman (null when the seller wrote negotiable: see `price_text`);\nprices of 1,000 Toman are placeholders. Rentals carry `prices` ({رهن deposit, اجاره rent}; `price` is the first\nof them). Use `neighbourhoods` (ids from sp_filters area=...) for areas inside a city. `nearby` ads are from around the city: the site adds them when few\nads match inside it. `promoted` ads are paid showcase slots and may not match your filters exactly. `matching` is the count of real matches; `total` also counts nearby/padding ads. Sorting by price puts placeholder prices first:\nset min_price to skip them. For a median or range of prices use sp_price_summary instead.","inputs":[{"name":"category","type":null,"required":false,"description":"Category slug from sp_categories (e.g. car, apartment-sell, mobile-phone) or a brand/model path from sp_filters (car/peugeot, car/peugeot/206). Omit to search every category."},{"name":"city","type":"string","required":false,"description":"City or province slug from sp_cities, e.g. tehran, mashhad, tehran-province. 'iran' = all Iran."},{"name":"filters","type":null,"required":false,"description":"Extra filters from sp_filters as {name: value}: a<id> takes an option id (a69150: '445100'), mn<id>/mx<id> are range ends (mn68101: '1400' = year from)."},{"name":"limit","type":"integer","required":false,"description":"Max ads to return (1-40)."},{"name":"max_price","type":null,"required":false,"description":"Highest price in Toman."},{"name":"min_price","type":null,"required":false,"description":"Lowest price in Toman, e.g. 100000000."},{"name":"neighbourhoods","type":null,"required":false,"description":"Neighbourhood ids from sp_filters(area=...) to search inside (up to 10), e.g. ['888', '974']. City-level only."},{"name":"page","type":"integer","required":false,"description":"Page number, 24 ads each."},{"name":"query","type":null,"required":false,"description":"Words to search in ads, Persian, e.g. پراید or آیفون 13."},{"name":"sort","type":"string","required":false,"description":"Order: newest (default), cheapest, priciest; cars also lowest_km, highest_km, oldest_year, newest_year."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":557},{"name":"sp_ad","title":"Ad details","description":"Get one Sheypoor ad in full: description, price, location, seller, every attribute and photo links.\n\n`id` comes from sp_search. `city_slug` and `category_slug` plug straight into sp_search; sp_similar finds\ncomparable ads. Rentals have `prices` (رهن deposit, اجاره rent) instead of one price. The seller's phone number needs a Sheypoor login and is not available here (the\nsite shows it masked); open `url` in a browser to contact the seller. For a list of similar ads call\nsp_search with the same category.","inputs":[{"name":"id","type":"string","required":true,"description":"Ad id from sp_search, e.g. 468673507."},{"name":"photos","type":"integer","required":false,"description":"How many photo URLs to include (0-10)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":170},{"name":"sp_price_summary","title":"Price summary for a search","description":"Summarise asking prices of the newest ads for a search: count, min, median, quartiles, max, plus cheapest and priciest ads.\n\nUse it to answer \"what does X cost on Sheypoor\". It samples the newest ads (up to 5 pages), so it shows\ncurrent asking prices, not sold prices. Ads without a numeric price and placeholder prices under 10,000\nToman are left out. Narrow the query (year, brand, city via sp_filters/sp_cities) for a useful median.\nValues are in Toman.","inputs":[{"name":"category","type":null,"required":false,"description":"Category slug from sp_categories (e.g. car, apartment-sell, mobile-phone) or a brand/model path from sp_filters (car/peugeot, car/peugeot/206). Omit to search every category."},{"name":"city","type":"string","required":false,"description":"City or province slug from sp_cities, e.g. tehran, mashhad, tehran-province. 'iran' = all Iran."},{"name":"filters","type":null,"required":false,"description":"Extra filters from sp_filters as {name: value}: a<id> takes an option id (a69150: '445100'), mn<id>/mx<id> are range ends (mn68101: '1400' = year from)."},{"name":"max_price","type":null,"required":false,"description":"Highest price in Toman."},{"name":"min_price","type":null,"required":false,"description":"Lowest price in Toman, e.g. 100000000."},{"name":"neighbourhoods","type":null,"required":false,"description":"Neighbourhood ids from sp_filters(area=...) to search inside (up to 10), e.g. ['888', '974']. City-level only."},{"name":"pages","type":"integer","required":false,"description":"How many result pages (24 ads each) to sample, 1-5."},{"name":"query","type":null,"required":false,"description":"Words to search in ads, Persian, e.g. پراید or آیفون 13."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":381},{"name":"sp_categories","title":"Categories","description":"List Sheypoor's categories with the slug sp_search and sp_filters take, grouped under 11 top-level groups.\n\nPass `query` to keep only matching groups or categories. Brands and models of cars live one level deeper:\nsp_filters(category=\"car\") lists their slugs (e.g. car/peugeot). Use the slug of a sub-category alone\n(car, not vehicles/car).","inputs":[{"name":"query","type":null,"required":false,"description":"Part of a category name or slug to filter by, e.g. خودرو or apartment."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":110},{"name":"sp_cities","title":"Cities and provinces","description":"Find the city or province slug that sp_search, sp_price_summary and sp_filters take.\n\nWith `query`, returns matching cities (slug, province); a province slug also works as `city` and covers\nevery city in it. Without `query`, lists the 31 provinces with their slugs and number of cities.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Max cities to return (1-50)."},{"name":"query","type":null,"required":false,"description":"Part of a city or province name or slug, e.g. مشهد or isfahan. Omit to list provinces."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":119},{"name":"sp_filters","title":"Filters of a category","description":"List the filters, sort orders, sub-categories (car brands, models) and neighbourhoods Sheypoor offers in one category.\n\nCall this before using `filters` in sp_search or sp_price_summary; every category has its own (cars: year, km,\ngearbox; sale: meterage mn68085/mx68085, rooms; rent: deposit mn68090 and rent mn68092; jobs: salary, contract).\nEach filter has a `name` (a<id>, mn<id>, mx<id>) and, for choices, `options` as {id, label}: pass {name: id}.\nRange filters list min/max names (pass a plain number, e.g. mn68101='1400'). Yes/no filters have\n`value` '1' (pass {name: '1'}); number filters take a plain number. `subcategories` slugs (car/peugeot,\nthen car/peugeot/206) go in `category`. `neighbourhoods` (id, name, ads) go in sp_search `neighbourhoods`; pass\n`area` to search the full list by name. The nearest-first sort needs the visitor's GPS and is not offered.\nPrices use min_price/max_price instead.","inputs":[{"name":"area","type":null,"required":false,"description":"Part of a neighbourhood name to look up its id, e.g. پونک. Needs a city (not 'iran')."},{"name":"category","type":"string","required":true,"description":"Category slug from sp_categories, e.g. car, houses-apartments-for-sale, house-apartment-for-rent, jobs sub-categories like driver. A brand path (car/peugeot) lists its models."},{"name":"city","type":"string","required":false,"description":"City or province slug from sp_cities, e.g. tehran, mashhad, tehran-province. 'iran' = all Iran."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":386},{"name":"sp_similar","title":"Similar ads","description":"Find ads comparable to one ad: same city and deepest category (car model...), price within a percent band.\n\nUse it to judge whether an ad is cheap or dear, or to find alternatives; the `id` comes from sp_search. If fewer\nthan 3 ads match, it widens to the parent category (car/hyundai/creta -> car/hyundai) and says so in\n`category`. Rentals and ads without a numeric price are matched by category only. Newest first; the ad itself\nand paid showcase ads are left out. For the price distribution of the category use sp_price_summary.","inputs":[{"name":"id","type":"string","required":true,"description":"Ad id from sp_search, e.g. 468673507."},{"name":"limit","type":"integer","required":false,"description":"Max ads to return (1-24)."},{"name":"price_range_pct","type":"integer","required":false,"description":"Keep ads priced within this percent of the ad's price (5-100)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":195},{"name":"sp_shops","title":"Internet shops","description":"List Sheypoor's internet shops and agencies (real-estate offices, car dealers...) in a city and group.\n\nUse it to find businesses rather than single ads; call sp_shop with a shop `slug` for its details and ads.\n`category` is a top-level group (real-estate, vehicles...), not a sub-category such as car. Shops with no\nads are left out (the site lists them but their page is gone), so a page may hold fewer than `limit` shops.","inputs":[{"name":"category","type":null,"required":false,"description":"Top-level group slug from sp_categories, e.g. real-estate, vehicles, jobs, home, electronics. Omit for all."},{"name":"city","type":"string","required":false,"description":"City or province slug from sp_cities, e.g. tehran, mashhad, tehran-province. 'iran' = all Iran."},{"name":"limit","type":"integer","required":false,"description":"Shops per page (1-24)."},{"name":"page","type":"integer","required":false,"description":"Page number."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":203},{"name":"sp_shop","title":"Shop details","description":"Get one internet shop or agency: name, hours, group, its agents and its current ads.\n\n`slug` comes from sp_shops (or `seller.shop` ads from sp_ad). Phone numbers are masked on the site and left out.\nEach ad has an `id` for sp_ad.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Max of the shop's ads to return (0-24)."},{"name":"slug","type":"string","required":true,"description":"Shop slug from sp_shops, e.g. amlakalijenabtehran."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":111},{"name":"sp_car_prices","title":"Daily car prices","description":"Get Sheypoor's daily car price list (قیمت روز خودرو): market price and factory price per model and year, with the day's change.\n\nUse it for \"what is a 1404 Tiba worth today\" or to check an ad's price against the market average; it is\nSheypoor's average of market quotes, not ads. `market` is the open-market price, `factory` the maker's list\nprice (null = none). Values are in Toman; `change_pct` is today's move of the market price. For real ad\nprices use sp_price_summary instead.","inputs":[{"name":"group","type":null,"required":false,"description":"Maker group: saipa-group, iran-khodro-group, domestic-group, foreign-group, modiran-group, kerman-group. Omit for all."},{"name":"limit","type":"integer","required":false,"description":"Max models to return (1-60)."},{"name":"query","type":null,"required":false,"description":"Brand or model words, Persian or English, e.g. پراید, 206, Tiba, هایما."},{"name":"year","type":null,"required":false,"description":"Model year as listed, e.g. 1404 or 2023."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":232},{"name":"sp_area_prices","title":"Prices per neighbourhood","description":"Compare asking prices between neighbourhoods of a city: median price, price per square metre, rent and deposit.\n\nUse it for \"where is renting cheapest in Tehran\" or \"price per metre in Pounak vs Saadat Abad\". It samples each\narea's newest 24 ads (one request per area), so medians are rough. Sale ads give `median_price` and, with\nmeterage, `median_per_m2`; rentals give `median_deposit` and `median_rent`. Values in Toman. Pick ids with\nsp_filters(category, city, area=...); see sp_search with `neighbourhoods` for the ads themselves.","inputs":[{"name":"category","type":"string","required":true,"description":"Category slug, e.g. houses-apartments-for-sale, house-apartment-for-rent, car, land."},{"name":"city","type":"string","required":true,"description":"City slug from sp_cities, e.g. tehran (not 'iran')."},{"name":"neighbourhoods","type":null,"required":false,"description":"Neighbourhood ids from sp_filters(area=...). Omit to take the busiest ones."},{"name":"top","type":"integer","required":false,"description":"How many of the busiest neighbourhoods when none are given (1-8)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":244}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T03:15:35.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"verified","label":"Verified","reason":"verified","reasonLabel":"Verified","discovery":"attestation_endpoint","discoveryLabel":"Registry attestation endpoint","sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[{"hook":"build_backend","tier":"allowlisted"}],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":35,"partial":false,"deprecated":null,"stale":null,"noRepo":1}},"mismatches":[],"changelog":{"trackingSince":"2026-11-01","recent":[{"id":"chg_01a1a4f7-db3c-7415-9801-68708b37a45d","kind":"check.reverified","summary":"Malware scan (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a1a4f7-db3c-7415-9801-68708b37a45d"},{"id":"chg_01a1a4f7-db3d-7ef4-9cfe-ef71e9420c2a","kind":"score.total_changed","summary":"Trust score (64 → 79)","materiality":"functional","direction":"improvement","scoreDelta":15,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a1a4f7-db3d-7ef4-9cfe-ef71e9420c2a"},{"id":"chg_01a19fd3-dc6c-71ba-9c8d-50a4521b878a","kind":"check.unverifiable","summary":"Malware scan (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a19fd3-dc6c-71ba-9c8d-50a4521b878a"},{"id":"chg_01a19fd3-dc6d-797d-9202-72c06aff28b9","kind":"score.total_changed","summary":"Trust score (79 → 64)","materiality":"functional","direction":"regression","scoreDelta":-15,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a19fd3-dc6d-797d-9202-72c06aff28b9"},{"id":"chg_01a19a02-6fce-74fa-89b9-1533558403e2","kind":"check.reverified","summary":"Malware scan (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a19a02-6fce-74fa-89b9-1533558403e2"},{"id":"chg_01a19a02-6fcf-7af1-91df-9538b0ae09ba","kind":"score.total_changed","summary":"Trust score (64 → 79)","materiality":"functional","direction":"improvement","scoreDelta":15,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a19a02-6fcf-7af1-91df-9538b0ae09ba"},{"id":"chg_01a196de-7308-760e-964b-7d1e7e3ccf73","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp#chg-chg_01a196de-7308-760e-964b-7d1e7e3ccf73"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp","markdown":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp.md","changelogJson":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/sepehr071-sheypoor-mcp/sheypoor-mcp.xml","external":[{"label":"PyPI project","href":"https://pypi.org/project/sheypoor-mcp/"},{"label":"Socket report","href":"https://socket.dev/pypi/package/sheypoor-mcp"},{"label":"Repository","href":"https://github.com/sepehr071/sheypoor-mcp"}]}}