FORKPIN 포크핀Agent Access

Muse connector reviewer · reproducible public path

Identify a restaurant, then inspect its handoff.

This page uses the public first MCP profile. Anonymous reads need no key and are subject to the limits in /agent.json. FORKPIN returns identity, sourced facts and evidenced provider URLs. It does not submit a reservation, collect guest details, or know live availability. Send the restaurant name in Hangul when you have it; English or romanized names also work. Include a road address to confirm identity and set lang=en for English response text. If only an English name is known, the Gateway may use bounded GPT-Luna help after stored-name lookup misses; the translated name is marked derived and never proves identity by itself.

Run the requests against https://forkpin.kr. Use the Content-Type and Accept headers shown below. Results may change as evidence is refreshed; confirm the returned place ID, route evidence and unknown fields instead of assuming an old link still works. Typical latency: resolve ~1s; search_places first call a few seconds, ~1s after cache.

1. Initialize and list tools

The server accepts MCP protocol 2025-06-18. The first profile is /mcp?profile=first; initialize returns server instructions and current contract version. It does not require authentication or issue a session ID in the current deployment.

BASE=https://forkpin.kr
MCP="$BASE/mcp?profile=first"
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"cooksup-eval-reviewer","version":"1"}}}'
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","method":"notifications/initialized"}'
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

Read tool descriptions from tools/list or the current manifest. The first profile includes list_areas, resolve, get_place and reporting tools; broader searches use the full profile. In the full profile, the reservation widget tool is titled Booking-page links (link only): it returns an evidenced link, not a booking action.

Anonymous reads require no registration. To report or inspect your own credits, POST /v1/agents/register returns an active, unverified instance key immediately. Save the key once, send it as X-Agent-Key, then accept the published one-time agent consent. Registration does not certify the instance for signed handoffs. From 7 days before expiry, the current key can renew at POST /v1/agents/key/renew while the old key remains valid until expiry. If compromised, POST /v1/agents/key/rotate immediately revokes old credentials; if lost, request owner-admin reissue through support. Read the live authentication contract before registering.

2. Call a public read tool

The demo covers 소공동, 명동1가, 명동2가, 을지로1가 and 을지로2가. Check coverage with list_areas, then resolve Grand Kitchen at its road address in 명동1가. The 2026-09-29 production read identified 3010000-101-1971-06619; get_place returned one naver_booking reservation-page link and six unknown fields. Other facts may change with collection, so inspect the returned menu, hours, options and amenities instead of assuming they are complete. Read each verification_status and unknown_fields; a displayed schedule does not prove the restaurant is open now.

curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"list_areas","arguments":{}}}'
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"resolve","arguments":{"name":"그랜드 키친","address":"서울특별시 중구 명동길 61","lang":"en"}}}'
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"get_place","arguments":{"place_id":"3010000-101-1971-06619","action":"reservation","lang":"en"}}}'

On the 2026-09-29 production read, Grand Kitchen with the same Korean road address and lang=en also resolved to that ID. Its name_translation was explicitly derived with model gpt-6-luna. An English-only name works too: Aria alone returned multiple address candidates without confirming one restaurant; adding 서울특별시 중구 소공로 106 resolved to 3010000-101-1973-06774. If the model or budget is unavailable, clarify the identity; never treat a translated spelling alone as a match. The get_place route is a handoff to the provider page. The provider handles date, party size, final confirmation and any payment. For report_outcome, register an instance and obtain outcomes:write; an anonymous reviewer should inspect the scope error, not send a fabricated outcome.

curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":10,"method":"tools/call","params":{"name":"resolve","arguments":{"name":"Aria","lang":"en"}}}'
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":11,"method":"tools/call","params":{"name":"resolve","arguments":{"name":"Aria","address":"서울특별시 중구 소공로 106","lang":"en"}}}'

3. Explore the five demo neighborhoods

NeighborhoodQuestion to tryTool
소공동Which Aria is at 서울특별시 중구 소공로 106, and is a reservation handoff recorded?resolve with name and address
명동1가What menu, hours and reservation channel are displayed for Grand Kitchen at 명동길 61?resolve, then get_place
명동2가Which restaurants in 명동2가 have displayed parking, and which are unknown?search_places, full profile
을지로1가Show candidate restaurants in 을지로1가 without claiming a verified route for every candidate.search_places, full profile
을지로2가Which 을지로2가 candidates have a recorded reservation channel?search_places, full profile

The full profile also allows anonymous reads; no key is needed. Use $BASE/mcp?profile=full for search_places. The English area query below returned candidate matches and a separate unknown_places list on 2026-09-29. Candidates are paged; missing evidence is never treated as a condition match. list_areas reports collection progress, not booking availability.

curl -sS "$BASE/mcp?profile=full" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":12,"method":"tools/call","params":{"name":"search_places","arguments":{"area":"Myeongdong","required_options":["parking"],"lang":"en"}}}'

4. Reproduce failure boundaries

MCP tool errors below return HTTP 200 with result.isError: true; inspect the JSON-RPC result rather than HTTP status alone.

# No credential: get_agent and get_credits return agent_auth_required (401 inside the tool result).
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' --data '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"get_agent","arguments":{}}}'
# Wrong input type: resolve reports input validation failure.
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' --data '{"jsonrpc":"2.0","id":7,"method":"tools/call","params":{"name":"resolve","arguments":{"name":"그랜드 키친","address":42}}}'
# catalog is outside the first profile: Tool catalog disabled.
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' --data '{"jsonrpc":"2.0","id":8,"method":"tools/call","params":{"name":"catalog","arguments":{}}}'
# Private admin route is not hosted on the public Gateway: HTTP 404.
curl -sS -o /dev/null -w '%{http_code}\n' "$BASE/admin/api/sync"
# An invented name stays unmatched; resolve returns no place ID and does not invent a route.
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":13,"method":"tools/call","params":{"name":"resolve","arguments":{"name":"Nonexistent BBQ Palace","lang":"en"}}}'
# A fabricated place ID returns unknown_place.
curl -sS "$MCP" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'X-Client-Name: cooksup-eval-reviewer' --data '{"jsonrpc":"2.0","id":14,"method":"tools/call","params":{"name":"get_place","arguments":{"place_id":"nonexistent-bbq-palace","lang":"en"}}}'

A name without a road address returns candidates and asks for the branch or street address; it does not confirm a restaurant. Unmatched identities require clarification; an unknown place ID returns unknown_place. A route with no verified URL remains empty. Rate limits return Retry-After; do not poll or invent a provider link.

Support and correction path · Privacy · Terms