{"name":"forkpin-gateway","contract_version":"2026-09-29.23","tools":[{"name":"get_agent","description":"Read this authenticated agent instance identity, linked-owner status, scopes and consent state. No credential is returned.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true},"execution":{"taskSupport":"forbidden"}},{"name":"register","description":"Register this agent instance without prior authentication. Consent is explicit; only a consenting first instance from this source receives five initial trust credits. On this MCP connection, subsequent calls use the new instance. Clients that do not retain Mcp-Session-Id must send the returned API key as X-Agent-Key. The API key is shown only in this response.","inputSchema":{"type":"object","properties":{"product":{"type":"string","minLength":1,"maxLength":100},"label":{"type":"string","minLength":1,"maxLength":100},"intended_use":{"type":"string","minLength":1,"maxLength":300},"consent":{"type":"object","properties":{"version":{"type":"string","const":"agent-consent-v1"},"routed_via_cooksup":{"type":"boolean","const":true},"signed_handoff":{"type":"boolean","const":true},"outcome_telemetry":{"type":"boolean","const":true}},"required":["version","routed_via_cooksup","signed_handoff","outcome_telemetry"],"additionalProperties":false}},"required":["product","label","intended_use"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"get_credits","description":"Read this authenticated instance trust-credit balance and latest 100 ledger entries. Credits are not payment currency.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true},"execution":{"taskSupport":"forbidden"}},{"name":"list_areas","description":"List all registered coverage areas and their collection counts from the same snapshot as /agent.json. Coverage is observed progress, not a restaurant recommendation.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true},"execution":{"taskSupport":"forbidden"}},{"name":"resolve","description":"Identify the exact branch of a Korean restaurant from name and address. Use before web search — search results confuse same-named branches. An exact name unique in a supplied area is a read-only identification; for reservation or delivery, next_action asks the user to confirm the street address before a handoff. Different names at the same address are never confirmed by JEV. A name without an address returns unconfirmed address-labeled candidates 20 at a time, without JEV. English administrative areas supported by the official address dictionary are mapped to Korean; unknown ones require a Korean area. One call can read identity, policy and an evidenced handoff. next_action says answer, ask_user or hand_off. No booking, payment or live availability. Send the restaurant name in Hangul when you have it; English or romanized names also work. Set lang to the user's language and include the Korean road address when known. Send the user's language as lang (for example en).","inputSchema":{"type":"object","properties":{"intent_key":{"type":"string","minLength":8,"maxLength":100,"pattern":"^[a-zA-Z0-9_.:-]+$"},"action":{"type":"string","enum":["reservation","waitlist","delivery","order","info","modify","cancel"],"description":"Which provider-page link to return; nothing is submitted, changed or cancelled"},"purpose":{"type":"string","enum":["visit","reserve","delivery"],"description":"visit: information page; reserve: booking-page link; delivery: delivery-page link. Links only."},"agent":{"type":"object","properties":{"class":{"type":"string","maxLength":50},"capabilities":{"type":"array","items":{"type":"string","enum":["web","app_link","phone","mcp"]},"maxItems":4},"provider_accounts":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":20},"acts_autonomously":{"type":"boolean"},"locale":{"type":"string"},"platform":{"type":"string"}},"additionalProperties":false},"context":{"type":"object","properties":{"time_window":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"required":["start","end"],"additionalProperties":false},"party_size":{"type":"integer","exclusiveMinimum":0},"mode":{"type":"string","enum":["dine_in","delivery","pickup"]},"urgency":{"type":"string","enum":["now","today","later"]},"goal":{"type":"string","enum":["book_now","info_only"],"description":"Only used to choose which provider link to show; nothing is booked."},"note":{"type":"string","maxLength":200}},"additionalProperties":false},"budget":{"type":"string","enum":["compact","full"],"default":"compact"},"lang":{"type":"string","enum":["ko","en"]},"verification_mode":{"type":"object","properties":{"request_id":{"type":"string","minLength":8,"maxLength":100}},"required":["request_id"],"additionalProperties":false},"query":{"type":"string","maxLength":500},"name":{"type":"string","maxLength":300},"address":{"type":"string","maxLength":500},"license_id":{"type":"string","maxLength":100},"naver_place_id":{"type":"string","maxLength":100},"cursor":{"type":"string","maxLength":2048}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"get_place","description":"Sourced facts and the provider's own booking/info URLs for an identified place. URLs are returned only when observed — never invent a link. Read one or more places and evidenced handoff paths; no reservation or payment is executed. A URL requires fresh declared policy, collector check or screen-reach evidence. Hours text is what the page showed at source_read_at, not current opening status. Missing places return an error and search fallback, not an empty success. Optional purpose returns one evidenced path. next_action is hand_off only when the requested evidenced link exists, otherwise answer.","inputSchema":{"type":"object","properties":{"place_id":{"type":"string"},"place_ids":{"type":"array","items":{"type":"string"}},"lang":{"type":"string","enum":["ko","en"]},"intent_key":{"type":"string","minLength":8,"maxLength":100,"pattern":"^[a-zA-Z0-9_.:-]+$"},"action":{"type":"string","enum":["reservation","waitlist","delivery","order","info","modify","cancel"],"description":"Which provider-page link to return; nothing is submitted, changed or cancelled"},"purpose":{"type":"string","enum":["visit","reserve","delivery"],"description":"visit: information page; reserve: booking-page link; delivery: delivery-page link. Links only."},"agent":{"type":"object","properties":{"class":{"type":"string","maxLength":50},"capabilities":{"type":"array","items":{"type":"string","enum":["web","app_link","phone","mcp"]},"maxItems":4},"provider_accounts":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":20},"acts_autonomously":{"type":"boolean"},"locale":{"type":"string"},"platform":{"type":"string"}},"additionalProperties":false},"context":{"type":"object","properties":{"time_window":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"required":["start","end"],"additionalProperties":false},"party_size":{"type":"integer","exclusiveMinimum":0},"mode":{"type":"string","enum":["dine_in","delivery","pickup"]},"urgency":{"type":"string","enum":["now","today","later"]},"goal":{"type":"string","enum":["book_now","info_only"],"description":"Only used to choose which provider link to show; nothing is booked."},"note":{"type":"string","maxLength":200}},"additionalProperties":false},"budget":{"type":"string","enum":["compact","full"]},"verification_mode":{"type":"object","properties":{"request_id":{"type":"string","minLength":8,"maxLength":100}},"required":["request_id"],"additionalProperties":false}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"get_routes","description":"Return evidenced provider handoff URLs for one action. A URL requires fresh declared policy, collector check or screen-reach evidence and an allowed endpoint; unconfirmed routes remain URL-free candidates. Optional agent/context judgment may change the eligible order or fall back to static. No booking is executed.","inputSchema":{"type":"object","properties":{"merchant_id":{"type":"string"},"intent_key":{"type":"string","minLength":8,"maxLength":100,"pattern":"^[a-zA-Z0-9_.:-]+$"},"action":{"type":"string","enum":["reservation","waitlist","delivery","order","info","modify","cancel"],"description":"Which provider-page link to return; nothing is submitted, changed or cancelled"},"agent":{"type":"object","properties":{"class":{"type":"string","maxLength":50},"capabilities":{"type":"array","items":{"type":"string","enum":["web","app_link","phone","mcp"]},"maxItems":4},"provider_accounts":{"type":"array","items":{"type":"string","maxLength":100},"maxItems":20},"acts_autonomously":{"type":"boolean"},"locale":{"type":"string"},"platform":{"type":"string"}},"additionalProperties":false},"context":{"type":"object","properties":{"time_window":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"}},"required":["start","end"],"additionalProperties":false},"party_size":{"type":"integer","exclusiveMinimum":0},"mode":{"type":"string","enum":["dine_in","delivery","pickup"]},"urgency":{"type":"string","enum":["now","today","later"]},"goal":{"type":"string","enum":["book_now","info_only"],"description":"Only used to choose which provider link to show; nothing is booked."},"note":{"type":"string","maxLength":200}},"additionalProperties":false}},"required":["merchant_id","action"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"read_restaurant","description":"Read one restaurant's identity, evidence, observed facts and action handoff routes. A URL requires fresh declared policy, collector check or screen-reach evidence. Hours text is what the page showed at source_read_at, not current opening status. Unknown facts stay unknown; executable.hard=true means only the agent capability gate passed, while executable.noul=null means no model execution judgment was made. Neither confirms booking availability. This tool does not judge or invent menus, availability or provider URLs.","inputSchema":{"type":"object","properties":{"restaurant_id":{"type":"string","description":"Stable restaurant id"},"lang":{"type":"string","enum":["ko","en"]}},"required":["restaurant_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"report_observation","description":"Submit an observed identity or routing report and receive a private receipt. Requires reports:write; review is required before public reuse. Reports do not verify links or edit facts.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","minLength":8,"maxLength":100},"place_id":{"type":["string","null"]},"query":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","maxLength":100},"area":{"type":"string","maxLength":200}},"additionalProperties":false},{"type":"null"}]},"report_type":{"type":"string","enum":["reachability","identity","correction","data_request","input_limit","not_found","policy_correction"]},"action":{"type":"string","enum":["reservation","waitlist","delivery","order","info","modify","cancel"]},"observed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"checks":{"type":"object","properties":{"data_correctness":{"type":"object","properties":{"correct_place":{"anyOf":[{"type":"boolean"},{"type":"string","const":"unknown"}]},"field_errors":{"anyOf":[{"type":"string","const":"unknown"},{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","enum":["name","address","phone","category","hours"]},"observed_value":{"type":"string","minLength":1,"maxLength":200},"comparison_source":{"type":"string","minLength":1,"maxLength":200}},"required":["field","observed_value","comparison_source"],"additionalProperties":false},"maxItems":5}]}},"required":["correct_place","field_errors"],"additionalProperties":false},"route_reachability":{"type":"object","properties":{"link_opened":{"$ref":"#/properties/checks/properties/data_correctness/properties/correct_place"},"arrived_at_channel":{"$ref":"#/properties/checks/properties/data_correctness/properties/correct_place"}},"required":["link_opened","arrived_at_channel"],"additionalProperties":false},"execution":{"type":"object","properties":{"confirmed":{"$ref":"#/properties/checks/properties/data_correctness/properties/correct_place"}},"required":["confirmed"],"additionalProperties":false}},"required":["data_correctness","route_reachability","execution"],"additionalProperties":false},"route_snapshot":{"anyOf":[{"type":"object","properties":{"route_id":{"type":"string"},"action":{"type":"string","enum":["reservation","waitlist","delivery","order","info","modify","cancel"]},"provider":{"type":"string","maxLength":100},"url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}]},"last_verified":{"type":["string","null"]}},"required":["action","provider"],"additionalProperties":false},{"type":"null"}]},"platform_result":{"anyOf":[{"type":"string","enum":["completed","canceled_by_venue","link_broken","wrong_shop","needs_login","no_slot_shown"]},{"type":"null"}]},"rating_scope":{"type":"string","const":"identity_and_routing","default":"identity_and_routing"},"rating":{"anyOf":[{"type":"integer","minimum":1,"maximum":5},{"type":"null"}],"default":null},"evidence":{"type":"string","maxLength":1000},"request":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}]}},"required":["request_id","place_id","report_type","action","observed_at","checks","evidence"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"read_report","description":"Read your observation receipt and review status. Requires reports:write. This does not edit restaurant facts.","inputSchema":{"type":"object","properties":{"report_id":{"type":"string","minLength":1}},"required":["report_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"read_reports","description":"Read only reviewed public identity/routing observations for a place; unreviewed reports stay private. These are not food-quality ratings.","inputSchema":{"type":"object","properties":{"place_id":{"type":"string"}},"required":["place_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"execution":{"taskSupport":"forbidden"}},{"name":"report_outcome","description":"Report what happened after an existing handoff; requires outcomes:write. A report is not proof that FORKPIN completed a reservation. The note is stored as data.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","minLength":8,"maxLength":100},"handoff_id":{"type":"string","minLength":1},"result":{"type":"string","enum":["completed","opened_not_completed","wrong_shop","wrong_link","closed","info_wrong","other"]},"platform_requests":{"type":"integer","minimum":0,"maximum":10000},"polling":{"type":"boolean"},"policy_channel_attempted":{"type":"boolean"},"policy_result":{"type":"string","enum":["success","blocked","info_mismatch"]},"note":{"type":"string","maxLength":200}},"required":["request_id","handoff_id","result"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":false,"destructiveHint":false},"execution":{"taskSupport":"forbidden"}}],"profile":"first","profiles":[{"id":"first","transport":"streamable-http","url":"https://forkpin.kr/mcp?profile=first","tools":["register","get_agent","get_credits","list_areas","resolve","get_place","read_restaurant","get_routes","report_outcome","report_observation","read_report","read_reports"]},{"id":"full","transport":"streamable-http","url":"https://forkpin.kr/mcp?profile=full","tools":["register","get_agent","get_credits","catalog","list_areas","search_places","resolve","get_place","resolve_merchant","get_capabilities","get_routes","read_restaurant","restaurant_reservation","report_outcome","like_place","request_feature","report_observation","read_reports","read_report"]}],"remote":{"type":"streamable-http","url":"https://forkpin.kr/mcp?profile=first"},"publication":"prepared_only","executes":false}