aiwebhelper
AIWebHelper
브라우저 한 창을 사람과 AI 가 같이 보는 MCP 서버. 사람은 고칠 곳을 짚고, AI 는 같은 화면을 읽고 누른다.
왜
사람은 화면을 보고 AI 는 파일을 본다. 그 사이를 스크린샷으로 이으면 서로 짐작하게 되고, 짐작은 틀린다. 「이 부분 좀 고쳐 줘」 — 「어느 부분요?」 — 스크린샷 — 「거기 말고 그 위」.
이 도구는 그 왕복을 없앤다. 사람이 Alt+클릭으로 짚으면 AI 가 이렇게 받는다:
하고 싶은 말: 이 합계 글씨가 너무 작아요
글자: 8,700,000원
요소: span.v.mono.income
선택자: div.ledg-sum span.v.mono.income
짐작: apps/mail/src/client/ledger/ (클래스 ledg-sum)
감싼 것: div.ledg-sum ← div.ledg-sums ← div.ledg
⚠ 잘림: 6px 모자람 (112px 필요, 106px 있음)
크기: 106×23
스타일: block · 17px · rgb(30,142,90)
주소: http://localhost:5360/ledger/e2fa416e
창 폭: 1000px (기기 픽셀비 2)창 폭과 잘린 양이 같이 오는 것이 특히 값지다. 잘림은 폭에 따라 나타났다 사라져서, 「잘려요」와 「안 잘리는데요」가 둘 다 참인 일이 실제로 생긴다.
Related MCP server: Ghostlight
어떻게 도나
두 짝이다.
브라우저 확장 (
extension/) — 도구 버튼이나Alt+Shift+P로 켠다. 켠 탭에만 붙는다. 켜기 전에는 어느 페이지에도 들어가지 않는다. 서버를 부르는 일은 확장이 대신 한다(bridge.js). 페이지에서 직접127.0.0.1을 부르면 사이트가 막을 수 있어서다 — X 처럼connect-src를 못 박아 둔 곳에서는 짚어도 「Failed to fetch」 로 끝난다. 확장은 그 벽에 걸리지 않아 어디서나 같게 돈다. (북마클릿에는 다리가 없으므로 그때는 페이지가 직접 부른다.)여기 (
server.js) — 짚기를 HTTP 로 받아 두고(127.0.0.1:47391), AI 에게 MCP 도구로 내준다. 반대 방향도 같은 문으로 간다 — AI 가 시킬 일을 두면 페이지가 열어 둔 물음으로 가져간다. 0.5초마다 두드리는 대신 열어 두어서, 사람이 쓰는 페이지 안에서 종일 돌아도 조용하다.
프로젝트에 심지 않는 것이 요점이다. 도구가 프로젝트를 따라다니면 프로젝트마다 다시 심어야 하고, 배포에 섞일 걱정도 생긴다.
짚기 조각(extension/picker.js)은 한 벌뿐이다. 확장이 그 파일을 넣고, 서버도 같은 파일을
/picker.js 로 내준다(북마클릿용). 두 벌을 두면 «북마클릿에서는 되는데 확장에서는 안 되는»
종류의 일이 생긴다.
포트
47391. 7000·8000·5000번대는 개발 서버가 붐벼서 언젠가 부딪히고, 부딪히면 짚기가 먼저 뜬
쪽으로 조용히 흘러간다. 그래서 문을 못 열면 모든 도구 응답 앞에 그 사실을 붙인다.
AIWH_PORT 로 옮길 수 있고, 그때 /picker.js 는 자기가 듣는 포트를 박아서 내준다.
붙이기
~/.claude.json (또는 쓰는 MCP 클라이언트의 설정)에:
{
"mcpServers": {
"aiwebhelper": {
"command": "node",
"args": ["/절대/경로/AIWebHelper/server.js"]
}
}
}포트를 바꾸려면 "env": { "AIWH_PORT": "47391" }.
확장 얹기 (처음 한 번)
크롬에서
chrome://extensions를 연다오른쪽 위 개발자 모드를 켠다
압축해제된 확장 프로그램을 로드합니다 → 이 저장소의
extension/폴더를 고른다
명령줄
--load-extension은 최근 크롬(137+)에서 막혔다. 위 세 걸음이 유일한 길이고, 한 번만 하면 된다. 엣지·웨일도 같은 자리에 있다.
북마클릿으로 쓰고 싶으면 AI 에게 «how_to_start» 를 물으면 준다 — 확장을 못 얹는 브라우저용이다.
쓰기
고칠 화면으로 간다 (프로덕션이든 로컬이든)
도구 버튼을 누르거나
Alt+Shift+P— 배지에ON이 뜬다그냥 쓴다 — 도구는 방해하지 않는다. 앱이 평소대로 돈다
고칠 곳에서 Alt+클릭 → 화면 안 입력칸에 무엇을 고쳤으면 하는지 적고 Enter (비워도 된다)
AI 는
wait_for_pick으로 기다리다가 그대로 받는다
켜 두면 그때부터 한 창을 같이 본다. 「이 화면 좀 봐 줘」 하면 AI 가 읽고, 「여기 눌러 봐」
하면 누른다. AI 도 「이거 말씀이신가요」를 말 대신 page_point 로 짚어 보인다.
Alt+P 로 «늘 고르기»(여러 개를 잇달아 짚을 때), Esc 로 끄기, 버튼 다시 누르면 꺼짐.
도구
사람 → AI:
| 사람이 짚을 때까지 기다렸다 받는다. «어디 고칠까요» 대신 부른다 |
| 가장 최근에 짚은 것 |
| 최근 것들 |
| 비우기 |
| 사람에게 건넬 안내(북마클릿) |
AI → 사람이 보는 그 창:
| 지금 화면 — 주소·글·누를 수 있는 것들 |
| 「이거 말하는 거예요」 형광펜으로 짚어 보인다 |
| 크기·자리·글자·여백, 잘렸으면 몇 px 모자란지 |
| 누르기 · 적기 · 키 |
| 그 탭을 다른 주소로 |
| 나머지 전부 — 스크롤·폭 바꾸기·여러 단계 |
| 지금 켜 둔 탭들 |
탭이 둘 이상이면 조작 도구는 하지 않고 되묻는다. page 에 주소나 제목의 일부를 준다.
같은 주소가 둘로 보이면 짚기가 두 벌 뜬 것이라 되묻지 않고 나중 벌이 한다 — 같은 화면이니
고를 것이 없다.
page_run 은 사이트가 unsafe-eval 을 막아 두면(X 가 그렇다) 확장에게 넘겨 돌린다.
그마저 안 되는 브라우저에서는 page_measure 를 쓴다 — 재는 일에는 코드 실행이 필요 없다.
같이 보기 — 알고 쓸 것
page_* 는 사람이 로그인해 둔 진짜 창을 움직인다. 눌리면 진짜로 저장되고 발송되고
지워진다. 되돌릴 수 없다. 편한 만큼 그게 값이다.
울타리는 셋이다.
켠 탭에서만 돈다. 켜기 전에는 어느 페이지에도 들어가지 않는다.
Esc나 도구 버튼으로 끄면 그 자리에서 끊긴다. 배지의ON이 지금 이어져 있다는 표시다.127.0.0.1에만 연다. 밖에서 이 창을 움직일 길은 없다.애매하면 안 누른다. 「저장」이 셋인 화면에서 첫 번째를 몰래 고르지 않고, 목록을 돌려주고
nth로 정하게 한다. 되묻는 값은 왕복 한 번이지만 틀리는 값은 되돌릴 수 없다.
host_permissions 가 넓은 것은 켠 탭이 페이지를 옮겨도 관을 잇기 위해서다. activeTab
은 화면을 옮기면 사라져서, 켜 두고 링크 한 번만 눌러도 끊긴다. 넓은 만큼 켠 탭 목록이
유일한 울타리이므로, 안 쓸 때는 꺼 두는 편이 낫다.
고칠 때
node test.mjs서버·확장·페이지 셋에 걸쳐 있어서, 한 곳만 고치고 올리면 나머지는 옛것으로 남는다. 그때 증상은 «고쳤는데 그대로» 라 무엇이 옛것인지 알아내는 데만 한참 걸린다 — 실제로 그렇게 새로고침을 다섯 번 되돌렸다. 브라우저 없이 20초 안에 도니 올리기 전에 한 번 돌린다.
판 번호를 세 곳에서 맞춘다 — server.js·extension/picker.js 의 AIWH_VERSION,
extension/manifest.json 의 version. 시험이 검사하고, 어긋나면 서버가 도구 답 앞에
«무엇이 옛것인지» 를 붙인다.
브라우저에서만 알 수 있는 것(진짜 클릭 · 사이트의 CSP · 확장 다리)은 시험에서 안 잡힌다. 그건 확장을 새로고침하고 한 번 짚어 보는 수밖에 없다.
규칙 — 클래스에서 파일 짚기
presets/*.json 에 프로젝트마다 「클래스 접두어 → 파일 자리」를 적어 둔다.
주소로 알아서 고른다(match).
{
"name": "내 프로젝트",
"match": ["localhost", "example.com"],
"rules": [{ "prefix": "ledg-", "home": "src/client/ledger/" }]
}규칙이 없어도 된다. 요소·선택자·감싼 것·잘림·창 폭은 그대로 나온다 — 규칙은 덤이다.
이 방식이 React 의 소스 정보(_debugSource)보다 오래간다. 그건 React 19 에서 없어졌고,
프로덕션 빌드에서는 컴포넌트 이름도 압축되어 사라진다. CSS 클래스는 빌드를 지나도 남는다.
안 만든 것
화면 캡처. 글자·크기·잘린 양이 있으면 대개 그림이 필요 없고, 그림은 대화를 무겁게 한다.
앱에 심는 방식. 프로젝트마다 다시 심어야 하고 배포에 섞일 걱정이 따라온다.
Electron 껍데기. 처음엔 그렇게 만들었는데, 그러면 사람이 복사해서 붙여넣는 왕복이 남는다. MCP 면 AI 가 바로 받는다.
원격 접속.
127.0.0.1에만 연다. 남의 브라우저에서 온 짚기를 받을 이유가 없다.
Available Tools
13 toolsclear_picksA
짚어 둔 것을 비운다. 새 이야기를 시작할 때.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It clearly states the tool 'empties' (비운다) the picked items, which signals a destructive/clearing operation. However, it does not disclose whether the operation is irreversible, what exactly gets cleared (all picks vs. recent ones), or whether confirmation is needed. The core effect is conveyed, but the details are thin.
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 two short sentences: first states the action, second states when to use it. Every word contributes meaning, and the core information is front-loaded. No filler or redundant schema repetition.
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 a zero-parameter tool with no output schema, the description provides the essential facts: what it clears and the occasion for using it. It could be slightly more explicit in defining what '짚어 둔 것' are, but this is clarified by sibling tool names and the context of a story-starting workflow. The description is adequate, though not exhaustive.
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?
There are no parameters and the schema already fully covers them (100% coverage). With zero parameters, the description has little to add about parameter semantics. The baseline of 4 applies; the description's contextual note about starting a new story provides some extra purpose but no parameter-specific guidance is needed.
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 states a clear action: '짚어 둔 것을 비운다' ('empties what was picked/pointed out'). This clearly identifies the tool as clearing collected 'picks' and distinguishes it from sibling tools like list_picks, latest_pick, and wait_for_pick. However, the resource is phrased indirectly ('짚어 둔 것') rather than explicitly named 'picks,' so it relies on context.
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 description provides an explicit usage context: '새 이야기를 시작할 때' ('when starting a new story'). This tells the agent when to use the tool but does not mention exclusions or compare it to alternatives, such as using list_picks before clearing or avoiding it mid-story.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
how_to_startA
사람에게 건넬 안내 — 브라우저에 «짚기» 를 켜는 법(북마클릿·콘솔). 처음 한 번 필요하다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The text makes clear that the tool itself is merely a guide and does not perform a direct picking or state-changing browser action, which helps set the right expectation. It does not detail output format, but the purpose of a human-facing guide is sufficiently conveyed.
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 entire description is a single sentence that conveys the audience, the required action, the installation channel, and the one-time usage characteristic. No redundancy, no filler, no explanation of obvious details.
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 a zero-parameter, no-output-schema tool used once at the beginning, the description provides the core needed context: who the instruction is for, what it changes in the browser, and that it is a one-time prerequisite. It could mention what the tool returns or how to complete the given instructions, but for the minimal meta purpose this is sufficient.
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?
The tool accepts zero parameters, so there is no parameter meaning to be lost. The description does not need to compensate for any schema gaps because none exist.
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 clearly states that this is a guide to hand to a person for turning on the browser picking feature via bookmarklet or console. It distinguishes itself from the sibling tools that perform actual picking/page actions by framing itself as a one-time explanatory resource rather than an operation.
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 phrase '처음 한 번 필요하다' (needed only once at the beginning) gives explicit timing context for when this tool should be used. It does not explicitly name alternatives, but the one-time setup nature clearly separates it from the recurring pick and page tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
latest_pickA
가장 최근에 짚은 곳. 기다리지 않고 지금 있는 것만 본다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full behavioral burden. It discloses one useful trait: the tool is non-blocking and operates on the current state only, not waiting for a new pick. It does not however state whether calling it mutates anything, what happens when no pick exists yet, or what exactly is returned, so transparency is adequate but incomplete.
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 very short, front-loaded with the main purpose, and every phrase earns its place. The first sentence states the resource; the second gives the decisive behavioral contrast of not waiting and seeing only current state. There is no filler or redundant restatement.
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 a zero-parameter getter, the description is mostly sufficient and the no-wait behavior is important context. But there is no output schema, and the description does not clarify what the returned value looks like or what the tool does when no pick has occurred. Those gaps matter for an AI agent deciding how to use the result or how to handle an empty state.
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?
The tool takes zero parameters, so the input schema carries little meaning. With 0 params, the baseline is 4, and the description does not need to compensate for parameter documentation. Nothing about parameters is missing or ambiguous.
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 identifies a specific resource, '가장 최근에 짚은 곳' (the most recently picked place), and gives the essential verb concept of '본다' (looks/retrieves what is currently there). It also differentiates itself from wait_for_pick by emphasizing '기다리지 않고', so the purpose is clear. It stops short of 5 because 'pick' is never explicitly defined and the retrieval verb is somewhat vague.
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 phrase '기다리지 않고 지금 있는 것만 본다' gives the agent a clear usage context: use this when the current, latest picked value is wanted immediately, without waiting for a future pick. This also contrasts naturally with the sibling wait_for_pick. However, the description does not explicitly name alternatives like list_picks or explain when not to use it, so it misses a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_picksB
최근에 짚은 곳들을 새것부터 본다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 몇 개까지 (기본 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does state ordering; newest first, and implies read-only listing, but it does not explain whether it destroys anything, how it handles empty state, or if there are side effects. For a simple list read this is adequate but thin, so a 3 is appropriate.
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 short Korean sentence is concise and front-loaded with the core behavior: viewing recent picks with ordering. It does not waste words or repeat schema information, although it could have included a tad more context without becoming bloated.
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 a one-parameter listing tool without an output schema, the description states the relevant ordering (newest first) and recency of items, but the word 'picks' is not clearly defined in the context of these sibling tools. Simple enough that an agent might infer it, but there is room to specify output shape or edge cases.
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?
The only parameter 'limit' has a full description in the schema ('how many, default 10'), covering 100% of parameters. The tool description adds no extra meaning for the limit parameter, so the baseline score of 3 applies without bonus.
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 'recently picked places, newest first' clearly identifies the task as listing picks in reverse chronological order. It distinguishes from sister tool latest_pick by implying multiple items rather than a single newest one, though it could be more explicit about that contrast.
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?
There is no guidance about when to use this tool versus alternatives like latest_pick or clear_picks. The phrase 'recently picked' hints that it is appropriate for seeing recent entries, but it does not state circumstances, exclusions, or why an agent might select it over a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_clickA
화면의 무언가를 누른다. 선택자(CSS)나 보이는 글자로 찾는다. 사람이 보는 창에서 진짜로 눌리는 것이다 — 저장·삭제·발송도 그대로 일어난다. 여럿에 맞으면 누르지 않고 목록을 돌려준다. 그때 nth 로 정한다.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | 여럿일 때 몇 번째인지 (1부터) | |
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) | |
| text | No | 보이는 글자로 찾기 (선택자 대신) | |
| selector | No | CSS 선택자 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden, and it carries it well. It discloses that the click is a real, impactful action that can save/delete/send, and that it does NOT click when multiple matches occur — it instead returns a list. This is exactly the kind of side-effect/cancellation behavior an agent needs to know.
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 compact and front-loaded. '화면의 무언가를 누른다' states the core action first. Each sentence earns its place: method of finding, realness/severity of clicks, and ambiguity/return behavior. There is no 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?
With 4 optional parameters and no output schema, the description covers the most important behavior: real click, side effects, find-by-selector/text, and ambiguous-match behavior with nth. It could be slightly more explicit about page parameter before invocation, but the schema already documents it. Overall, essential information is present.
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 100%, and each parameter has already has clear descriptions (selector, text, page, nth, 1-based index). The description adds tells how targets can be found ('CSS selector 또는 visible text') and mentions visual text, which maps to the 'text' parameter, but it does not meaningfully explain parameter semantics beyond the schema.
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 clearly states a verb ('누른다' - clicks) and a specific resource ('화면', the screen). It also explains how it finds targets (CSS selector or visible text) and that it performs real clicks with side effects like save/delete/send. This distinguishes it well from click-like tools such as page_collect or page_look, even without naming siblings.
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 usage context is implied: use this tool when you want to click something visible on the page. It also gives one internal usage rule: when multiple elements match, it returns a list instead of clicking, and then nth should be provided. However, it never contrasts itself with alternatives like page_collect or page_run, or states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_fillA
입력칸에 글을 넣는다. React 같은 곳에서도 먹도록 값 변경을 알린다.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | 여럿일 때 몇 번째인지 (1부터) | |
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) | |
| text | Yes | ||
| submit | No | 넣고 Enter 까지 (기본 false) | |
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose an important behavioral trait: the tool not only fills the input but also fires the necessary value-change event so framework-managed fields work. This is genuinely useful context beyond the schema, though it does not mention submit behavior or failure outcomes.
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 two short, purposeful sentences with no filler. The core action is front-loaded, and the React value-change detail is added only as a second sentence because it is an important behavioral edge case.
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 a 5-parameter tool with no annotations and no output schema, the description conveys the main action and one important nuance but does not explain what happens on submit, how nth/page apply, or what failure indications might look like. It is minimally viable, not comprehensive.
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?
The schema already documents submit, page, and nth, and the description loosely indicates that text is the content and selector is the target input. With 60% schema coverage, the description adds modest value for the two undocumented parameters but does not deeply compensate for the gaps.
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 states a specific action—putting text into an input field—which is not a tautology and is more precise than generic synonyms. It also adds the React value-change dispatch behavior, which helps differentiate it from keyboard or click tools. It does not explicitly name sibling tools, but the verb and resource distinction is clear enough.
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 remark that it triggers value changes so it works in React-like contexts implies a use case, but there is no explicit guidance about when to choose this over page_key or another alternative. Context is implied, not stated as a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_gotoB
사람이 보고 있는 탭을 다른 주소로 옮긴다.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description itself must convey behavioral traits, and it does communicate that this is a state-changing navigation action on an existing tab. However, it does not disclose whether the tool waits for page load, whether it can fail on invalid addresses, or whether it replaces the current tab rather than opening a new one.
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 a single short sentence with no redundancy or filler. It front-loads the essential ideas: target is the current tab, action is navigation, goal is a different address.
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 a simple navigation tool, the description plus schema is enough to understand the basic call: provide a target address and optionally specify a tab. It is still missing context about return behavior, loading expectations, and when this tool is intended to be preferred over browser-level alternatives.
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 only 50%, so the description should compensate for the undocumented `url` field. The phrase '다른 주소' adds navigation meaning to that parameter, but it does not explicitly map to the parameter name, and it says nothing about the `page` parameter or how it disambiguates tabs.
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 Korean description states a clear action: move the currently viewed tab to another address, which unmistakably identifies this as a navigation command. It distinguishes itself from siblings like page_click and page_fill in behavior, but it does not explicitly name or contrast those alternatives, which keeps it from a 5.
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 description provides no explicit guidance on when to use page_goto instead of page_click, page_run, or another page-level tool. There is no when-to-use/when-not-to-use statement, so an agent must infer appropriateness from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_keyB
키를 누른다 (Enter · Escape · Tab · ArrowDown 등).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| nth | No | 여럿일 때 몇 번째인지 (1부터) | |
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) | |
| selector | No | 이 요소에 (없으면 지금 focus 된 곳) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It only says 'presses a key' and does not mention whether the key press goes to the focused element, the optional selector target, or whether it can cause side effects like tab navigation or focus changes.
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 front-loaded sentence with no filler. The examples are immediately useful and directly relevant to the single required parameter.
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?
The overall tool context is not fully established: there are no annotations or output schema, and the description omits important behavioral details such as focus handling, optional targeting context, and expected execution outcome.
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 most parameters are already documented. The description adds value for the key parameter by listing concrete acceptable values, but adds nothing for nth, page, or selector beyond what the schema already explains.
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 states a precise action, '키를 누른다' (presses a key), with concrete key examples. The verb-and-object pairing clearly distinguishes it from page_navigation, clicking, and filling tools among the siblings.
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?
No usage context, when-to-use guidance, or alternatives are provided. The description simply says 'presses a key' without explaining when to choose this over page_click, page_fill, or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_listA
지금 짚기가 켜져 있는 탭들. 탭이 둘 이상이면 조작 도구가 «어느 탭인지» 를 되물으므로, 그때 여기서 골라 page 로 준다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It explains that the output represents currently picked tabs and how that output is consumed by manipulation tools. It does not disclose the exact return shape, what the values look like, or edge cases such as an empty list, and there is no output schema to fill that gap.
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 a single compact sentence with the subject stated first and the usage context immediately following. There is no filler or repeated structural information.
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 a zero-parameter listing tool, the description is mostly complete: it tells the agent what data is available and how to use it. The main missing piece is an explicit statement of the returned value's shape, especially without an output schema, but the intended use is still inferable.
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?
The input schema has zero properties, so parameter semantics are irrelevant here. Schema description coverage is 100%, and the description correctly avoids inventing parameter details.
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 identifies the tool as showing tabs that currently have 'picking' enabled, which matches the page_list name and its role of selecting a page. It does not use an explicit verb like 'returns a list,' but the resource and state are clear. It is distinguishable from the manipulation tools, though it does not explicitly differentiate itself from sibling pick tools such as list_picks.
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 description gives a concrete usage scenario: when more than one tab is picked, manipulation tools ask which tab is intended, and the agent should call page_list and pass the chosen value to page. This is clear and actionable. However, it does not name alternative tools or say explicitly when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_lookA
사람이 보고 있는 화면을 읽는다. 주소·제목·창 크기와, 눈에 보이는 글과 누를 수 있는 것들. 무엇을 할지 정하기 전에 먼저 이것을 부른다 — 화면이 이미 바뀌어 있을 수 있다.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) | |
| selector | No | 이 안만 읽는다 (없으면 화면 전체) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden of behavioral disclosure. It clearly indicates this is an observation operation and specifies exactly what will be read: URL, title, window size, visible text, and clickable elements. The note that the screen may have changed adds useful situational context.
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 compact and well-structured: it states the main behavior, enumerates subject matter, and closes with practical usage guidance. Every sentence adds value, and there is no repetition or fluff.
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 a tool with two optional parameters, a fully documented schema, and no output schema, this description provides sufficient context. It explains why and when to call the tool plus the content of the returned information, so an agent can select and invoke it correctly without missing pieces.
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 100%, so both parameters are already documented in the input schema. The description adds no parameter-level detail beyond the schema, so it meets the baseline without providing extra semantic value.
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 verb ('읽는다') and a specific resource: the screen a person is looking at. It also enumerates what is captured — address, title, window size, visible text, and clickable elements — making the tool's read-only role unmistakable relative to sibling action tools like page_click and page_goto.
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?
Explicitly instructs the agent to call this tool first, before deciding what to do, and gives the rationale: the screen may have changed. It clearly articulates when to use it, though it does not explicitly name alternatives or say when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_pointA
사람에게 «이거 말하는 거예요» 하고 화면에서 짚어 보인다. 형광펜처럼 테두리를 그리고 말을 붙인다. 무엇을 고칠지 이야기할 때, 말로 설명하는 대신 이것을 쓴다.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | 여럿일 때 몇 번째인지 (1부터) | |
| say | No | 붙일 말 | |
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) | |
| selector | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full responsibility for behavior. It clearly discloses the visible effect: show the user the element, draw a highlight, and attach a message. It is slightly less transparent about whether the highlight persists or whether any page state is changed, but the core behavior is well described.
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 short and well-structured: it states the action, the visible result, and a clear use case. A tiny redundancy between the parenthetical example and the following explanation keeps it from being fully compact.
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?
Given the tool has no output schema and only four simple parameters, the description plus the schema is very sufficient for callers. The main missing point is that page_point does not say whether it has any lasting or permanent side effects, such as leaving an annotation after the call.
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?
The schema already describes most parameters (nth, say, page), so the description adds little beyond a broad confidence. It reinforces the purpose of selector and say, but it does not clarify what selector is or give details about return values. With schema coverage at 75%, the description does not need to do all the heavy lifting but also does not add significant extra 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?
The description uses a specific verb '짚어 보인다' (point out) and explains the mechanism: draws a highlight-like border and attaches a word. This clearly distinguishes page_point from siblings such as page_click or page_fill, making its purpose immediately recognizable.
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 description explicitly says to use this when discussing what to fix, instead of explaining verbally. This gives a clear usage context, though it does not name sibling tools or explicitly say when not to use other page_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_runA
페이지 안에서 자바스크립트를 돌리고 결과를 받는다. 위 도구로 안 되는 것 전부 — 값 재기·스크롤·폭 바꾸기·여러 단계. 마지막 식의 값이 결과다. await 를 쓸 수 있다.
| Name | Required | Description | Default |
|---|---|---|---|
| js | Yes | ||
| page | No | 어느 탭인지 — 주소나 제목의 일부 (탭이 둘 이상일 때만 필요) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behavior: it runs in the page, supports await, and returns the value of the last expression. It does not mention error handling or side effects, but for a JavaScript-execution tool the central effect is clearly stated, and no annotations were provided to rely on.
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 short, purposeful sentences with no filler. The main verb is named first, followed by usage context and behavioral details needed to invoke the tool.
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 explains the return convention and the supported JavaScript capabilities, which is the core missing context. It does not specify error/timeout conventions, but for a fallback automation tool this is still a sufficiently useful definition.
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?
The page parameter is already documented in the schema, while the description adds meaningful semantic for the js parameter: it is a command string that can use await and whose final expression is the result. This compensates for the moderate schema coverage and gives actionable input rules.
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 that it executes JavaScript inside a page and returns the result, which is a specific action on a clear resource. It also describes example operations (measuring, scrolling, resizing, multiple steps) and distinguishes itself from the specialized sibling page 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?
Explicitly positions the tool as the fallback for anything the other page_* tools cannot do, giving strong when-to-use guidance. It does not name the specific sibling tools as alternatives, but the exclusion is likely clear enough from the surrounding tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_pickA
사람이 화면에서 «여기» 라고 짚을 때까지 기다렸다가 그 자리를 돌려준다. «어디를 고칠까요» 라고 되묻는 대신 이것을 부른다. 이미 짚어 둔 것이 있으면 바로 준다.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_sec | No | 몇 초까지 기다리나 (기본 120) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load, and it does explain waiting, returning the selected position, and returning immediately if a pick already exists. However, it does not disclose timeout behavior, what happens when no pick occurs, or whether the call mutates or persists any internal pick state.
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 concise sentences cover the action, the preferred usage context, and a key optimization. Each sentence is useful, there is no redundant repetition of the schema, and the primary behavior is front-loaded.
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?
The tool has only one optional parameter and no output schema, so the description communicates the basic interaction well. Still, it leaves out the return value's concrete shape (e.g., coordinates versus element reference) and fails to state what occurs after timeout, which are relevant for an agent deciding how to handle the response.
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?
The schema already fully documents timeout_sec with a clear summary and default value. The description adds the contextual fast-path condition, but it does not add new meaning to the parameter itself, so this dimension stays at the baseline for full schema coverage.
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 clearly defines a specific verb and resource: it waits until a person taps on the screen and then returns that spot. It does not explicitly contrast itself with siblings such as latest_pick or clear_picks, but the wait-for-interaction behavior is semantically distinct enough for the reader to understand the tool's core function.
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 description gives explicit usage direction: instead of asking 'where should I fix it', call this tool. It also notes the immediate-return behavior when a pick already exists, which guides the agent in expecting a likely cheap call or a potentially blocking wait depending on state.
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.
13 tool updates
v0.1.0- First observed
clear_picks - First observed
how_to_start - First observed
latest_pick - First observed
list_picks - First observed
page_click - First observed
page_fill - First observed
page_goto - First observed
page_key - First observed
page_list - First observed
page_look - First observed
page_point - First observed
page_run - First observed
wait_for_pick
TDQS
Scored across 13 tools
The tools split cleanly into pick management, page interaction, and onboarding. The pick tools each have a distinct behavior — waiting, returning latest, listing, clearing — and the page_* tools are distinct interaction actions, so agents should be able to choose the right one.
The page_* tools follow a clear, consistent verb pattern, but the pick-related tools are inconsistent: latest_pick, list_picks, clear_picks, and wait_for_pick mix singular/plural and different phrase structures. how_to_start is also a one-off, making overall naming mixed but still readable.
With 13 tools, the server is well-scoped for its purpose. The tools cover onboarding, pick lifecycle, tab awareness, page reading, interaction, and a JavaScript escape hatch without feeling bloated or redundant.
The tool set covers the full assisted-browsing workflow: setup, picking, waiting, page introspection, navigation, clicking, typing, pointing out, and arbitrary JavaScript for unusual cases. The page_run tool especially fills any long-tail gaps that the more specialized tools cannot handle.
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceLets any MCP-capable coding agent drive your real, logged-in Chrome through a local MCP server and MV3 extension.5-
- AlicenseAqualityAmaintenanceMCP server that lets AI agents drive your real Chromium browser with your existing signed-in sessions, providing visible, local, and inspectable automation for tasks like navigation, clicking, typing, and form filling.251Apache 2.0
- AlicenseNot gradedqualityAmaintenanceLocal browser MCP server that lets AI assistants control a real desktop browser via tools like navigate, snapshot, and search_web.MIT
- AlicenseNot gradedqualityAmaintenanceA native MCP server that gives AI assistants full Chrome control via the DevTools Protocol and an unpacked extension, including semantic element refs, real input, screenshots, and browser/tab/window management. It exposes 43 callable tools with a visible control overlay and an optional read-only security profile.3MIT