Japan Used Camera Market MCP Server
Allows monitor alerts for new listings, price drops, price increases, and sold-out items to be POSTed to a Discord webhook.
Allows monitor alerts for new listings, price drops, price increases, and sold-out items to be POSTed to an n8n webhook for workflow automation.
Allows monitor alerts for new listings, price drops, price increases, and sold-out items to be POSTed to a Slack webhook.
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., "@Japan Used Camera Market MCP ServerFind the cheapest AB-or-better Leica M6 in Japanese used camera shops"
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.
Japan Used Market — MCP server (cameras, watches)
An MCP server that lets Claude and other MCP clients search, price and watch Japan's used camera and watch shops. Every tool takes a market: "camera" (default) or "watch".
Market | Shop ( | Coverage | Grades, best → worst |
| Fujiya Camera, Nakano ( | full used stock, ~3,500 |
|
Sanpou Camera, Jiyugaoka ( | full used stock, ~1,300 | ||
Naniwa / Lemon-sha / Takachiho ( | new arrivals only, ~200–300 | ||
Hard Off Off Mall ( | cameras and lenses on sale, ~16,000 | ||
| WATCHNIAN ( | full used stock, ~3,900; box / warranty card |
|
Hard Off Off Mall ( | wristwatches on sale, ~24,000 |
Grades are normalized across shops, and every shop's own label is kept as well. Prices come in JPY and USD. Watches also carry the reference number (e.g. SBGA211, 16233).
It runs the Japan Used Camera Market and Japan Used Watch Market Actors on Apify with your own Apify token, so runs are billed to your Apify account. That is pay per result, and the free plan's monthly credit covers light use.
Renamed from
@keiya-dev/japan-used-camera-mcp. The old package still works (it now just starts this one), and calls withoutmarketbehave exactly as in 0.2.0. Switch the package name in your config when convenient.
Install
You need Node.js 20+ and an Apify API token: Apify Console → Settings → API & Integrations.
Claude Desktop
Edit claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"japan-used-market": {
"command": "npx",
"args": ["-y", "@keiya-dev/japan-used-market-mcp"],
"env": { "APIFY_TOKEN": "apify_api_..." }
}
}
}Restart Claude Desktop. The five tools appear under the 🔨 icon.
Claude Code
claude mcp add japan-used-market -e APIFY_TOKEN=apify_api_... -- npx -y @keiya-dev/japan-used-market-mcpCursor / other stdio clients
Command npx, args ["-y", "@keiya-dev/japan-used-market-mcp"], env APIFY_TOKEN.
Streamable HTTP
APIFY_TOKEN=apify_api_... npx -y @keiya-dev/japan-used-market-mcp --http --port 3000Endpoint
http://localhost:3000/mcp; health check/health.Each request may send its own token as
Authorization: Bearer <APIFY_TOKEN>; otherwise the server'sAPIFY_TOKENis used.The server is stateless (POST only, JSON responses).
Related MCP server: ec-mcp
Tools
Tool | What it does | Typical time |
| The markets, their shop ids, grades, price-history coverage and example keywords. No Apify run. | instant |
| Current listings matching | 15–60 s |
| Per-model summary of in-stock listings right now: count, min / median / max (JPY and USD) by shop and by grade, cheapest listing. | 1–4 min |
| Daily min / median / max / count per model, by shop, grade and shop × grade, for the last | seconds |
| Creates, in your Apify account, a saved Task in monitor mode plus a Schedule (default hourly, | ~1 min to set up |
sources and grades must belong to the chosen market (default: all of its shops). A mismatch, e.g. market: "watch" with sources: ["fujiya"], returns an error naming the valid values without starting a run. Monitors are named jucm-monitor-<name> (camera) or juwm-monitor-<name> (watch) in your Apify account.
Example prompts
"What's the cheapest AB-or-better Leica M6 in Japanese shops right now?"
"Compare Nikon Zf prices by shop and grade."
"How has the median Fujifilm X100VI price moved over the last 30 days?"
"Watch for new Voigtländer lenses under ¥80,000 and post them to my Slack webhook https://hooks.slack.com/services/…"
"Find a Grand Seiko SBGA211 in SA or better with box and papers, and give me the USD price."
"What's the median price of a Rolex 16233 in Japan, by shop?"
"Alert me on Discord when a new King Seiko appears."
Develop
npm install
npm test # tsc build + end-to-end tests (stdio, HTTP, missing token; camera + watch, market validation) against a fake Apify API
npm run start # stdio
npm run start:http # HTTP on :3000APIFY_API_BASE_URL overrides the Apify API base URL (used by the tests).
Notes
Not affiliated with any of the shops. Prices are the shops' tax-included asking prices, not sold prices.
Data comes from the shops' public listing pages (plus WATCHNIAN product pages for box / warranty card in
search). Serial numbers and condition notes are not read.The Actors' READMEs cover coverage, limits and pricing: https://apify.com/keiya_dev/japan-used-camera-market · https://apify.com/keiya_dev/japan-used-watch-market
legacy/is the old@keiya-dev/japan-used-camera-mcppackage: a thin wrapper that starts this server.
License
MIT
Available Tools
4 toolsprice_historyDaily price history per modelA
Daily min / median / max / count per model, by shop and condition grade, from stored daily snapshots of the shops (Fujiya, Sanpou and Naniwa; collected since 2026-11-05, so the first month is short). No crawling — returns in seconds. Needs keywords, brands or models.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days back from today (Japan time). | |
| brands | No | Exact brand names, e.g. ["Leica", "Nikon", "FUJIFILM"]. | |
| grades | No | Normalized condition grades, best to worst: NEW > A > AB+ > AB > AB- > B > ASIS > PARTS. | |
| models | No | Exact model keys as returned by price_stats ("model" field), e.g. ["leica m6", "nikon zf"]. | |
| sources | No | Shops: fujiya (full used stock), sanpou (full used stock), naniwa (new arrivals only), hardoff (Hard Off Off Mall cameras + lenses on sale, ~16,000). Default: all four. | |
| keywords | No | Match any of these in brand + title (case-insensitive, English or Japanese), e.g. ["Leica M6", "X100VI"]. | |
| maxPriceJpy | No | ||
| minPriceJpy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does well: it discloses the data source (stored daily snapshots), performance expectations (returns in seconds, no crawling), and a material data caveat (collection began 2026-11-05, first month is short). It stops short of describing result size, pagination, or behavior when all filters are omitted.
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?
Three tight sentences, front-loaded with the returned metrics and followed by the freshness/performance caveats. Minor noise: the shop list is repeated from the schema, and it names only Fujiya, Sanpou and Naniwa while `sources` also includes hardoff.
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 an 8-parameter, no-output-schema, no-annotation tool, the description covers the return shape and data freshness but leaves the two price-bound parameters unexplained and omits hardoff from the snapshot coverage. The unenforced "needs keywords, brands or models" requirement is a notable unresolved ambiguity.
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 75%, so the baseline is 3. The description adds the collection start date, which gives the `days` parameter real meaning, but it ignores minPriceJpy/maxPriceJpy entirely, and "Needs keywords, brands or models" conflicts with a schema declaring zero required parameters - an agent could reasonably expect a validation error that will not occur.
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 resource and output shape: "Daily min / median / max / count per model, by shop and condition grade." The phrase "from stored daily snapshots ... No crawling — returns in seconds" implicitly separates it from a live-crawl sibling like search_listings, but neither price_stats nor search_listings is named, so sibling routing is left partly to inference.
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?
"Needs keywords, brands or models" gives a precondition for use, which is real guidance. However, there is no explicit when-not, no statement of how this differs from price_stats (which supplies the model keys), and no guidance on what happens if no filter is supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_statsCurrent price stats per modelA
Per-model price summary of in-stock listings right now: count and min / median / max (JPY and USD), broken down by shop and by normalized condition grade, plus the cheapest listing. Use keywords to stay fast (~1–4 min).
| Name | Required | Description | Default |
|---|---|---|---|
| brands | No | Exact brand names, e.g. ["Leica", "Nikon", "FUJIFILM"]. | |
| grades | No | Normalized condition grades, best to worst: NEW > A > AB+ > AB > AB- > B > ASIS > PARTS. | |
| sources | No | Shops: fujiya (full used stock), sanpou (full used stock), naniwa (new arrivals only), hardoff (Hard Off Off Mall cameras + lenses on sale, ~16,000). Default: all four. | |
| keywords | No | Match any of these in brand + title (case-insensitive, English or Japanese), e.g. ["Leica M6", "X100VI"]. | |
| maxItems | No | Listings to read before summarizing (0 = all; a full read of all shops takes ~4 min). | |
| maxPriceJpy | No | ||
| minPriceJpy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it discloses latency (~1–4 min), that only in-stock listings are counted, and exactly what aggregates are returned. It does not explicitly state read-only behavior or rate limits, but the latency warning is the operationally important trait for a long-running read.
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-loaded with the core purpose and return contents, ending with the actionable performance hint. The parenthetical currency and timing details earn their space, though the sentence is long enough to be slightly harder to scan.
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 no output schema and no annotations, the description effectively substitutes for one by enumerating the returned statistics and their groupings. The main residual gap is the two undocumented price-bound filters, plus no explicit statement of read-only semantics for a 7-parameter tool.
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 71%, so the baseline is 3, and the description adds real value on top: it links keywords to reduced runtime and maps the shop/condition breakdown outputs back to the sources and grades filters. minPriceJpy and maxPriceJpy remain undocumented in both schema and description, which keeps it below 5.
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 precisely (per-model price summary of in-stock listings) and enumerates the computed statistics (count, min/median/max in JPY and USD, per-shop and per-grade breakdowns, cheapest listing). That distinguishes it from search_listings and price_history by implication, though it never names those siblings explicitly.
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: an agent can infer this is the tool for aggregate current pricing rather than listing retrieval or historical trends. The only explicit guidance is the performance tip to use keywords to stay fast, with no when-not-to-use conditions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsSearch used camera listings in JapanA
Search current used camera / lens listings at Japanese shops (Fujiya Camera, Sanpou Camera, Naniwa new arrivals, Hard Off Off Mall). Returns title, brand, normalized condition grade, price in JPY and USD, stock status and URL. Takes ~15–60 s.
| Name | Required | Description | Default |
|---|---|---|---|
| brands | No | Exact brand names, e.g. ["Leica", "Nikon", "FUJIFILM"]. | |
| grades | No | Normalized condition grades, best to worst: NEW > A > AB+ > AB > AB- > B > ASIS > PARTS. | |
| sources | No | Shops: fujiya (full used stock), sanpou (full used stock), naniwa (new arrivals only), hardoff (Hard Off Off Mall cameras + lenses on sale, ~16,000). Default: all four. | |
| keywords | No | Match any of these in brand + title (case-insensitive, English or Japanese), e.g. ["Leica M6", "X100VI"]. | |
| maxItems | No | Stop after this many matching listings (1–200). | |
| maxPriceJpy | No | ||
| minPriceJpy | No | ||
| includeSoldOut | No | Also return listings marked sold out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and usefully discloses source coverage, returned fields, and a 15–60 s latency expectation. It does not clarify read-only behavior, authentication needs, failure modes, or whether results are cached/live beyond the word 'current'.
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?
The description is three compact sentences: purpose first, returned fields second, latency last. Every sentence adds relevant information without repetition or 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?
For an eight-parameter search tool with no output schema and no annotations, the description supplies the key return shape, source scope, and expected latency. It remains slightly incomplete on price-filter semantics, sorting behavior, and operational caveats, but is sufficient for an agent to understand and call the tool.
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 75%, so the schema already documents most parameters, including brands, grades, sources, keywords, maxItems, and includeSoldOut. The description adds little parameter-specific meaning beyond mentioning source shops and normalized condition grades, and the min/max price filters are left without extra explanation.
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 gives a specific verb and resource: searching current used camera/lens listings at named Japanese shops. It clearly distinguishes the tool from price-oriented siblings by focusing on live listings, though it does not explicitly reference the sibling 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 context implies this is the tool for finding current listings rather than price statistics, price history, or monitoring. However, it provides no explicit when-to-use guidance, exclusions, or routing against the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_monitorStart a change monitor (scheduled)A
Creates, in the user's own Apify account, a saved Task running this Actor in monitor mode and a Schedule for it (hourly by default), then starts the first run to record the baseline. Later runs emit only changes (NEW / PRICE_DROP / PRICE_UP / SOLD_OUT) and can POST them to a Slack / Discord / n8n webhook. This creates resources and recurring runs that use the user's Apify credit — confirm with the user first.
| Name | Required | Description | Default |
|---|---|---|---|
| cron | No | Cron expression for the Schedule (default hourly). Please not more often than every 15 minutes. | 0 * * * * |
| name | Yes | Short id for the Task and Schedule, lowercase letters, digits and dashes, e.g. "leica-m-watch". | |
| brands | No | Exact brand names, e.g. ["Leica", "Nikon", "FUJIFILM"]. | |
| grades | No | Normalized condition grades, best to worst: NEW > A > AB+ > AB > AB- > B > ASIS > PARTS. | |
| sources | No | Shops: fujiya (full used stock), sanpou (full used stock), naniwa (new arrivals only), hardoff (Hard Off Off Mall cameras + lenses on sale, ~16,000). Default: all four. | |
| keywords | No | Match any of these in brand + title (case-insensitive, English or Japanese), e.g. ["Leica M6", "X100VI"]. | |
| timezone | No | Asia/Tokyo | |
| alertEvents | No | Event types to output and send. Default: NEW and PRICE_DROP. | |
| maxPriceJpy | No | ||
| minPriceJpy | No | ||
| alertWebhookUrl | No | Slack / Discord incoming webhook or any URL that accepts a JSON POST. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does it well: it discloses that resources are created in the user's own Apify account, that runs are recurring and billable against their credit, that a baseline run happens immediately, and that later runs only emit deltas which may be POSTed to a webhook. This is exactly the side-effect and cost information an agent needs before invoking a mutating, scheduled tool.
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 sentences, front-loaded with what happens and followed by the risk warning; nothing is redundant. The cost/confirmation warning is placed at the end where it functions as a final gate before invocation.
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 an 11-parameter, annotation-free tool with no output schema, the description covers the mutation and cost side well but says nothing about what is returned (task ID, schedule ID, run ID) or how a monitor is later stopped or modified. Those omissions matter because nothing else in the definition supplies 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?
Schema description coverage is 73% and the schema already documents cron defaults, grade ordering, source semantics, and alertEvents defaults, so the description adds little parameter-level detail beyond restating the event types and the default hourly cadence. It does not explain how filters like brands/keywords/price bounds interact with the change detection, which would have been genuine added meaning.
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 concrete verb chain and resources: creates a saved Task in monitor mode, a Schedule, and starts a baseline run. It also clarifies that subsequent runs emit only change events, which cleanly separates this write/setup tool from the read-only siblings search_listings, price_stats, and price_history.
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?
Gives a clear operating context (long-running monitoring with change-only output) and an explicit precondition -- confirm with the user first because it consumes Apify credit. It never explicitly contrasts itself with the sibling query tools (e.g. 'use search_listings for a one-off check'), so the alternative selection is implied rather than stated.
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.
4 tool updates
v0.3.0- First observed
price_history - First observed
price_stats - First observed
search_listings - First observed
start_monitor
TDQS
Scored across 4 tools
Each tool targets a distinct mode of access: live search, current aggregate stats, stored historical snapshots, and automated monitoring setup. The only potential overlap is price_stats vs price_history, but the descriptions cleanly separate 'in-stock right now' from 'stored daily snapshots over time'. No two tools appear interchangeable.
All names use snake_case, which is consistent, but the verb pattern is mixed: search_listings and start_monitor are verb_noun while price_stats and price_history are noun-only. Still highly readable and predictable enough for an agent to infer purpose.
Four tools is on the lean side but each maps to a genuinely different capability (search, aggregate, history, monitoring), so nothing feels redundant. Marginal thinness aside, the surface is well-scoped for a niche market-data server.
The find-analyze-track lifecycle is covered: search live listings, summarize current prices, query historical trends, and set up ongoing monitoring. Minor gaps exist (no single-listing detail fetch, no way to enumerate supported shops/brands/models, no monitor management/edit), but agents can work around these via keyword search and start_monitor's parameters.
Maintenance
Related MCP Connectors
17 data tools in one MCP server, run on Apify: Google Shopping, Flights, Hotels, News, Images, Videos, Ads Transparency, Jobs and Trends; YouTube transcripts; AI visibility checks; Google Maps leads; App Store and Google Play reviews. Pay per result. Sign in with Apify (OAuth) or an API token.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Pay-per-call Apify Store analytics with free MCP discovery and x402 payments.
Apify MCP — run web-scraping Actors and fetch their dataset results.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to search and compare prices across Japanese used camera, watch, luxury brand, and instrument marketplaces from multiple stores, returning price, brand, condition, and source store information.-
- FlicenseNot gradedqualityBmaintenanceEnables searching products, fetching item details, listing categories, and viewing seller profiles for Japanese marketplaces Mercari and Yahoo! Flea Market via MCP tools.-
- FlicenseNot gradedqualityCmaintenancePay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query live pricing, resale, company KYC, SEC filings, patents, trademarks, public tenders, auctions and related market intelligence through MCP, returning clean typed JSON from primary sources on a pay-per-result basis.MIT