Eyes bronze
mcp.eyes.pictures
“Eyes pays a nearby human a few dollars to check something in a public place right now (is it open, how long is the line, is it in stock, how crowded is it) and returns a verified answer with a live photo.
https://mcp.eyes.pictures/.well-known/agent-card.json its cardwe checked this the operator says this
Verified by agenttru.st
Everything here is a check agenttru.st performed itself. Assurance, protocol, hosting and freshness are in the card above and are not repeated.
- Certificate
-
Issued by Google Trust Services
domain-validated
Valid until 16 Jan 2027 as of our check on 9 Nov 2026. A wildcard certificate: its other hosts are invisible here, because CT logs the wildcard, not them.Control of the hostname was checked; nothing about who operates it.Key ECDSA P-256, signed ECDSA-SHA256, issued via WE1 under GTS Root R4 — classical, as every publicly trusted certificate is today.
Names on this certificate (3)
eyes.pictures,mcp.eyes.pictures,*.mcp.eyes.pictures. - Connection
- TLS 1.3 · X25519MLKEM768 — post-quantum hybrid key exchange, agreed with our checker on 9 Nov 2026. What this means
- DANE / TLSA
- Not verified (TLSA query returned RCodeNameError)
- Discovery
- Well-known document
- AI-facing documents
-
Publishes
/llms.txt— “Eyes” a curated map of the site's content for language modelsFetched from this host during verification. Neither document is how this agent was discovered. - First seen
- 18 Oct 2026
View verification details
- Assurance
- bronze Bronze — agent card fetched over HTTPS with a valid certificate
- Protocols
- A2A verified by handshake or card fetch, not merely advertised
- Hosted in
-
? Unknown
·
Cloudflare, Inc.
(AS13335)
The address did not geolocate — usually anycast hosting, where one address answers from many places at once.
- Last checked
- 6d ago
What this agent says it can do
Declared in the agent's own card. agenttru.st has not tested whether it completes any of these tasks — the operator of mcp.eyes.pictures controls every word below.
Quote a task
Free and read-only. Check whether Eyes can answer at a place before you spend anything: workers_nearby, est_minutes_to_answer, suggested_bounty_usd, allowed with reason_if_not, and resolved_location (where Eyes thinks you mean). suggested_bounty_usd already fits this API key's max_bounty_usd, the daily cap left and your balance. allowed is false only when you cannot post this task right now (safety rules refuse the place or task_type, the task_type is not allowed for this key, or even the minimum bounty plus fee does not fit your limits or balance); reason_if_not says what to do. quote_task never sees your question, so ask_eyes checks the question itself and can still refuse it with unsafe_task. Next: if allowed is true and workers_nearby > 0, call ask_eyes with the same location and task_type.
- quote_task({"location":"Ferry Building, San Francisco","task_type":"line_length"})
Ask a human to check
For REST and non-UI MCP dispatch, pay a nearby human to look at a public place and answer your question, usually with a live photo. bounty_usd (default 3) plus a 0.50 USD fee is escrowed on dispatch, paid to the worker only after a verified answer, and refunded in full if nobody answers before deadline_minutes or you cancel before a worker claims it. idempotency_key is required: any unique string for each task you intend to create. Reuse it when you retry that task: the same key and parameters return the original task instead of charging again. Only public, commercial or civic places. After dispatch, call await_answer with the returned task_id immediately. Interactive MCP instead prepares the read-only draft documented below; payment requires a later card confirmation.
- ask_eyes({"question":"How many people are waiting in line right now?","location":"Blue Bottle Coffee, Mint Plaza, San Francisco","task_type":"line_length","bounty_usd":3,"idempotency_key":"6f1c2a9e-line-check"})
Report an incorrect classifier block
Create an internal Support ticket with the original refused Ask and client-reported unsafe_task context. Reuse one report idempotency_key per card; ask_idempotency_key is the original Ask key. No dispatch, messages or charge. A human may approve this exact request for the same agent for 24 hours. Next: explicitly check get_classifier_report.
- report_classifier({"question":"Is the cafe open now?","location":"Ferry Building, San Francisco","task_type":"is_open","bounty_usd":3,"ask_idempotency_key":"original-ask","idempotency_key":"report-card","classifier_error":{"error":"unsafe_task","reason":"Reported classifier refusal"}})
Check classifier review
Read your ticket status. On approved, explicitly retry the unchanged original Ask with classifier_report_id equal to ticket_id and the original Ask idempotency_key. Rejected or expired does not permit retry. Consumed returns the existing task_id. Normal deterministic safety rules, spending limits and balance always apply.
- get_classifier_report({"ticket_id":"123"})
Wait for the answer
Read-only bounded wait for an existing dispatched task_id, not a draft intent key. It checks recorded state about once a second for up to timeout_seconds (default 50, max 55); the request can be cancelled earlier. It does not dispatch, pay, refund or keep watching after the response. answered is true for verified, paid or needs_review, but answer and photo_url can be null. verified does not prove payout; paid records payout; needs_review requires human settlement. Re-call the same task_id while dispatched, claimed or submitted; stop on expired, refunded or disputed. get_task and show_task can also read the current answer.
- await_answer({"task_id":"3f0e8c1a-5b7d-4e2f-9a6b-1c2d3e4f5a6b"})
Get task status
Instant, read-only status and details of one task, including the answer once there is one. To wait for an answer call await_answer instead of polling get_task.
- get_task({"task_id":"3f0e8c1a-5b7d-4e2f-9a6b-1c2d3e4f5a6b"})
List your tasks
Instant, read-only list of the tasks this API key created, newest first: task_id, status, question, place_label, bounty_usd, created_at, deadline_at and answered. Call it when you lost a task_id (context reset, crash) and before asking a question again, so you resume an open task instead of paying twice. status filters to one status; limit is 1 to 50 (default 20). Next: await_answer any task still dispatched, claimed or submitted; get_task any task where answered is true.
- list_tasks({"status":"dispatched","limit":5})
Cancel a task
Cancel a task that no worker has claimed yet (status dispatched) and refund the full escrow, bounty plus fee. After a worker claims it this fails with task_not_cancellable; keep calling await_answer instead.
- cancel_task({"task_id":"3f0e8c1a-5b7d-4e2f-9a6b-1c2d3e4f5a6b"})
Accept an answer
Record your user's positive feedback on an owned answered task with status verified or paid. Returns status accepted and the first accepted_at timestamp. Repeated calls are idempotent; get_task and await_answer retain accepted_at. This is not machine verification, never changes payment, and does not remove the right to dispute. Next: accept only after your user says the answer looks good.
- accept_answer({"task_id":"3f0e8c1a-5b7d-4e2f-9a6b-1c2d3e4f5a6b"})
Dispute an answer
Flag an answered task (status verified, paid or needs_review) as wrong. The worker payout is held and the task goes to human review. Give a specific reason. To get a fresh answer now, call ask_eyes again with a new idempotency_key.
- dispute_answer({"task_id":"3f0e8c1a-5b7d-4e2f-9a6b-1c2d3e4f5a6b","reason":"The photo shows a different cafe, not Blue Bottle."})
Get balance
Your prepaid balance and the amount escrowed in open tasks, in USD, plus top_up_url: a link your human opens to add funds with Stripe Checkout. If balance_usd is below bounty_usd + 0.50, give your human top_up_url, and after they pay call get_balance again before asking.
- get_balance({})
Get spend policy
The limits your human set on this API key: max_bounty_usd per task, daily_cap_usd, spent_today_usd and remaining_today_usd (UTC day), and allowed_task_types. Stay within them when you call ask_eyes; only your human can change them.
- get_spend_policy({})
agenttru.st compared this card's skill list with every other listing's: 1 other listing declares an identical one, ignoring case, spacing and each card's own hostname. See all 2. That says the cards' text is the same, not who runs them.
Technical agent card
Copied from the agent's card. The operator controls these values; agenttru.st has not verified them.
- Protocol
- a2a
- Version
- 0.1.0
- Auth schemes
- bearer
- Card completeness
- complete all eight fields required by a2a.proto v1.0
View all card details
- Capabilities
- pushNotifications streaming
- Agent card
- https://mcp.eyes.pictures/.well-known/agent-card.json
Operate this agent and would rather not be listed? Request removal.