{"ok":true,"site":{"host":"sungjoon.works","url":"https://sungjoon.works/ko","type":"live","desc":"Sungjoon Lee","tools":[{"name":"search_portfolio","kind":"answer","impl":"imperative","description":"Search all published portfolio content (photography, music performances, dev projects, blog posts) by free-text keyword. Returns matching items with the page path to visit. Blog posts are part of the dev section and appear as 'dev/blog'. This tool has no tag index: when the request names a tag or a tech stack, use the dedicated tool instead — list_blog_posts for blog tags, list_projects for tech stacks, filter_photos for photo tags. Only those know which tags exist and can answer that none match. They are registered on their own section pages, so when one is not in the current tool list, either open that page first or answer from this keyword search.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword to search for. Korean and English both work."},"section":{"type":"string","description":"Restrict results to one section.","enum":["photo","music","dev"]},"limit":{"type":"number","description":"Maximum number of items to return. Defaults to 8, capped at 20."}},"required":["query"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko","pages":["/ko","/en","/ko/photo","/en/photo","/ko/photo/albums","/en/photo/albums"]},{"name":"get_profile","kind":"answer","impl":"imperative","description":"Get a short profile of Sungjoon Lee (photographer, pianist, frontend developer) and a map of the site: every page of each section plus the contact page. Use this to find which page holds what before navigating.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"section":{"type":"string","description":"Focus on one section, or use 'all' for the full profile.","enum":["photo","music","dev","all"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko","pages":["/ko","/en","/ko/photo","/en/photo","/ko/photo/albums","/en/photo/albums"]},{"name":"filter_photos","kind":"act","impl":"imperative","description":"Filter the photo grid on this page by tag, camera, or focal length range (mm). Filters stack: an argument you omit keeps its current value. Clear a tag or camera with 'all'; reset the focal range by passing focalMin 16 and focalMax 300. Call with no arguments to see the available tags and cameras plus the filters already active, even when nothing matches. Updates the visible grid and returns how many photos match.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"tag":{"type":"string","description":"Tag id or label to filter by, or 'all' to clear."},"camera":{"type":"string","description":"Camera name to filter by, or 'all' to clear."},"focalMin":{"type":"number","description":"Minimum focal length in mm (16-300)."},"focalMax":{"type":"number","description":"Maximum focal length in mm (16-300)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko/photo","pages":["/ko/photo","/en/photo"]},{"name":"get_photo_details","kind":"answer","impl":"imperative","description":"Get details of one photo (title, place, camera, lens, exposure) without opening it. Omit photoId to describe the photo currently open in the detail modal. Use open_photo instead when the visitor should see the photo.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"photoId":{"type":"string","description":"Photo id from filter_photos results. Omit for the photo already open."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko/photo","pages":["/ko/photo","/en/photo"]},{"name":"open_photo","kind":"act","impl":"imperative","description":"Open one photo in the detail modal so the visitor can see it.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"photoId":{"type":"string","description":"Photo id from filter_photos results."}},"required":["photoId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko/photo","pages":["/ko/photo","/en/photo"]},{"name":"list_albums","kind":"answer","impl":"imperative","description":"List published photo albums with the page path of each album's detail page.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Maximum number of items to return. Defaults to 8, capped at 20."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ko/photo/albums","pages":["/ko/photo/albums","/en/photo/albums"]}],"category":"Media & Personal","favicon":"/favicons/sungjoon.works.png","apiSurface":"spec","toolCount":6}}