Skip to main content
Glama
lchenter
by lchenter

WYEA-WORKFLOW-MCP

AI가 결정이 필요할 때 GitHub 이슈를 만들고, 이메일로 알린 뒤, 사람의 댓글을 받아 작업을 이어가게 하는 MCP 서버입니다.

AI의 결정 요청 → 비공개 GitHub 이슈 + 이메일 → 사람의 댓글 → AI가 확인하고 작업 재개

기존 GitHub·Google 계정을 사용합니다. 별도 AI API 키나 상시 클라우드 서버는 필요 없습니다. MCP를 실행하는 PC와 사용하는 AI 앱은 켜져 있어야 합니다.

빠른 설치 · 사용법 · 문제 해결 · MIT 라이선스

빠른 설치

1. 준비하고 실행하기

필요한 것: Node.js 22 이상, GitHub CLI, GitHub 계정, Google 계정, MCP를 지원하는 AI 앱.

git clone https://github.com/lchenter/WYEA-WORKFLOW-MCP.git
cd WYEA-WORKFLOW-MCP
npm ci
npm run setup

2. 설치 마법사 따라가기

순서

사용자가 할 일

마법사가 하는 일

GitHub 연결

열린 브라우저에서 로그인

GitHub CLI의 공식 브라우저 로그인 실행. 이미 로그인했다면 건너뜀

이슈 보관함

비공개 저장소 OWNER/REPO 입력. 없다면 new 입력

GitHub 저장소 생성 페이지 열기, 비공개 여부·이슈 기능·권한 확인

담당자·이메일

담당 GitHub 계정과 메일을 받을 주소 한 개 입력

담당자 지정 가능 여부 확인, 임의의 연결 키 생성

Google 연결

Apps Script에 준비된 코드를 붙여넣고 최초 배포

Apps Script 새 프로젝트 페이지 열기, 개인용 코드 생성·클립보드 복사

마무리

웹 앱 URL 한 번 붙여넣기

이메일·연결 키 일치 확인, MCP 설정 파일 생성

이 공개 저장소는 프로그램 배포용입니다. 작업 요청과 승인 내용은 각 사용자의 별도 비공개 저장소에 저장됩니다. 이메일 수신자는 해당 비공개 이슈를 볼 수 있는 GitHub 계정으로 로그인해야 합니다.

브라우저가 자동으로 열리지 않으면 터미널에 표시된 링크를 누르세요. 자동 열기를 끄려면 npm run setup -- --no-open을 씁니다. 브라우저 로그인은 GitHub CLI의 공식 인증 흐름을 사용합니다. 토큰을 코드에 붙여넣지 않습니다.

3. Apps Script 최초 배포 — 한 번만

마법사가 Apps Script 새 프로젝트를 엽니다. 메일을 보낼 Google 계정으로 로그인합니다. 수신 이메일은 이 계정과 달라도 됩니다.

  1. 프로젝트 이름을 Workflow 알림으로 정합니다.

  2. 기본 Code.gs 내용을 지우고 마법사가 복사한 코드를 붙여넣어 저장합니다. 복사가 안 됐다면 프로젝트의 .local/Code.gs를 열어 전체 내용을 복사합니다.

  3. 배포 → 새 배포 → 유형 선택 → 웹 앱을 선택합니다.

  4. 실행 사용자: 나, 액세스 권한: 모든 사용자로 설정합니다.

  5. 배포하며 Google 권한을 승인하고, 표시된 **웹 앱 URL(/exec)**을 마법사에 붙여넣습니다.

Google 인증·권한 승인·최초 배포는 사용자 본인이 해야 합니다. 이 부분까지 자동 로그인하거나 배포하는 기능은 없습니다. Google 웹 앱 배포 안내.

“확인되지 않은 앱” 안내가 보이면 본인이 방금 만든 프로젝트·계정이 맞는지 확인하고 Google의 안내에 따릅니다. 회사·학교 Google 계정에서 외부 액세스 또는 권한 승인이 차단되면 관리자의 허용이 필요할 수 있습니다.

생성한 코드는 이메일 발송만 담당하며 Drive·Sheets·Gmail 받은편지함을 읽지 않습니다. 외부 요청은 무작위 연결 키로 인증하고, 수신자는 배포된 코드에 고정됩니다. 설정 완료 검사는 메일을 보내지 않습니다. MailApp 권한 안내.

4. AI 앱에 연결하기

마법사가 현재 PC의 절대 경로를 넣은 파일을 만듭니다. 다른 사람의 경로를 복사할 필요가 없습니다.

앱

연결 방법

Codex

생성된 .local/codex.toml 내용을 ~/.codex/config.toml에 추가. 동일 이름의 기존 항목은 중복 추가하지 말고 교체

Claude Code

아래 CLI 명령 실행 또는 .local/mcp.json의 항목을 프로젝트 .mcp.json에 병합

Claude Desktop / 다른 stdio MCP 앱

.local/mcp.json의 mcpServers 항목을 앱의 MCP 설정에 병합

프로젝트 폴더에서 CLI로 연결하는 방법도 있습니다. <절대경로>는 이 프로젝트의 전체 경로로 바꿉니다.

codex mcp add wyea-workflow -- node "<절대경로>/server.mjs"
claude mcp add --transport stdio --scope user wyea-workflow -- node "<절대경로>/server.mjs"

두 명령을 모두 실행할 필요는 없습니다. 사용하는 앱 하나만 설정합니다. Codex는 긴 댓글 대기를 위해 tool_timeout_sec = 600을 설정할 수 있습니다. Codex MCP 안내, Claude Code MCP 안내.

앱을 재연결한 뒤 AI에게 **“wyea_status로 연결 상태를 확인해 줘”**라고 합니다. ready: true면 준비됐습니다. npm run check로도 확인할 수 있습니다.

Related MCP server: Discord Decision MCP

사용법

첫 사용: 이슈와 메일 한 통 만들기

AI에게 아래처럼 요청합니다.

wyea-workflow로 검토 요청을 만들어 줘. 제목 맨 앞에는 실제 실행 모델명과 추론 강도를 AUTH:LLM(모델명-추론강도) 형식으로 적어. 질문은 “현재 변경을 반영할까요?”, 선택지는 “반영”과 “보류”야. 이슈와 메일은 한 번만 만들고 내 댓글을 기다려.

AI가 호출하는 예시입니다. 아래 모델 표기는 예시이므로 실제 실행 설정으로 바꿉니다.

{
  "title": "AUTH:LLM(GPT-6-Astra-high) 변경 반영 검토",
  "question": "현재 변경을 반영할까요?",
  "options": ["반영", "보류"],
  "context": "관련 변경과 검증 결과를 여기에 적습니다.",
  "maxWaitSec": 45
}

위 인자를 wyea_ask에 전달하면 다음을 수행합니다.

  1. 설정한 비공개 저장소에 이슈 생성·담당자 지정.

  2. [WYEA 작업] … 이메일 한 통 요청. 메일에는 이슈 링크가 포함됩니다.

  3. 새 댓글을 기다림. 기본 확인 간격은 60초입니다.

  4. 답을 받으면 decision, 댓글 본문, 선택지 정보를 AI에게 반환.

이메일이 도착하면 링크를 열어 GitHub 이슈에 댓글을 답니다. 이메일 답장을 직접 읽는 기능은 없습니다.

사람은 어떻게 답하나요?

댓글 첫 줄

의미

승인 또는 approve

승인

거부 또는 deny

거부

1, 2, 2번

해당 선택지 선택

내일 진행하고 문구부터 바꿔 주세요

자유 지시. AI가 본문 전체를 읽고 판단

추가 설명은 둘째 줄부터 적으면 됩니다. 자동 분류는 첫 줄을 기준으로 하며, 같은 GitHub 계정을 쓰더라도 도구가 작성한 댓글은 답으로 세지 않습니다. 모델명 표시는 호출자가 적는 식별 표시이며 모델 신원을 암호학적으로 증명하는 기능은 아닙니다.

답이 아직 없거나 이어서 물어볼 때

  • status: timeout이면 wyea_ask({"issue": 이슈번호})만 다시 호출합니다. 새 이슈·메일은 생성하지 않습니다.

  • 기존 이슈에서 새 질문을 하려면 wyea_ask({"issue": 이슈번호, "question": "다음 질문…"}). 질문 댓글과 메일 한 통을 추가합니다.

  • 단순 진행 보고는 wyea_comment. 메일은 가지 않습니다. 메일도 필요한 추가 요청은 wyea_notify 또는 질문이 있는 wyea_ask를 씁니다.

  • wyea_create_issue 자체에 메일 요청이 포함됩니다. 생성 직후 wyea_notify를 또 호출하지 않습니다.

  • mail.ok: true는 메일 서버 처리 응답입니다. 실제 수신 여부는 받은 사람이 확인합니다. 실패·시간초과 시 자동 재발송하지 않습니다.

이 MCP는 AI가 도구를 호출한 요청을 처리합니다. 모든 터미널 승인창을 자동으로 가로채거나, GitHub 웹에서 직접 만든 모든 이슈에 자동 메일을 보내지는 않습니다. 앱이 종료되면 로컬 댓글 대기도 멈추며, 재시작 후 이슈 번호로 다시 기다릴 수 있습니다.

도구 목록

도구

용도

wyea_status

인증·비공개 저장소·메일 엔드포인트 확인

wyea_ask

이슈 또는 질문 댓글 → 메일 → 댓글 대기 → 답 해석

wyea_create_issue

이슈 생성·할당·메일 한 번. 제목 AUTH:LLM(Modelname-thinkinglevel) 필수

wyea_notify

기존 이슈의 추가 요청을 메일로 알림

wyea_wait

새/수정 댓글 대기

wyea_check

새/수정 댓글 한 번 확인

wyea_snapshot

읽고 처리한 댓글까지 기준 갱신

wyea_comment

진행 또는 결과 댓글. 메일 없음

wyea_close

작업 완료 후 이슈 닫기

터미널에서 사용하기

npm run check
node cli.mjs parse "2번" --option "반영" --option "보류"
node cli.mjs check 12
node cli.mjs ask --issue 12 --max 45

아래 명령은 실제로 이슈와 이메일을 만듭니다. 모델 표기를 현재 설정으로 바꾸세요.

node cli.mjs create "AUTH:LLM(GPT-6-Astra-high) 검토 요청" "변경 내용을 검토한 뒤 댓글로 의견을 남겨 주세요."

CLI 결과는 JSON입니다. ask 종료 코드 0은 답을 받음, 3은 아직 답이 없음, 1은 오류입니다. notify, comment, close 상세 인자는 cli.mjs 상단을 참조하세요.

설정 변경

  • 수신 이메일 변경: npm run setup을 다시 실행해 새 이메일 입력 → 생성된 .local/Code.gs로 기존 Apps Script 코드 교체 → 배포 관리 → 수정 → 새 버전 배포 → 같은 /exec URL 입력. 기존 연결 키는 재사용합니다.

  • GitHub 계정 변경: gh auth switch 또는 gh auth login --web 후 npm run setup. 이전 이슈 기록과 새 계정의 접근 권한을 확인합니다.

  • 키 분실·노출: 현재 작업을 멈추고 .local/.notify.env를 별도 안전한 장소에 보존한 뒤 새 설정 키를 생성·배포합니다. 구버전 배포도 비활성화해야 구키 사용이 중단됩니다.

  • 다른 PC로 이동: 새 PC에서 설치를 다시 진행합니다. .local을 공유 저장소에 올리지 않습니다.

고급 설정은 로컬 wyea-workflow.config.json입니다. WYEA_CONFIG, WYEA_REPO, WYEA_ASSIGNEE, WYEA_STATE_DIR, WYEA_SECRET_FILE, WYEA_NOTIFY_URL, WYEA_AGENT 환경 변수도 지원합니다. 설정 파일의 상대 경로는 해당 설정 파일 위치를 기준으로 계산합니다.

개인정보와 저장 위치

  • 이 배포본에는 운영자의 실제 이메일, 비공개 저장소 설정, Google 배포 ID, 인증 파일, 개인 작업 기록을 포함하지 않습니다.

  • GitHub 인증은 GitHub CLI가 관리합니다. 이 프로젝트가 GitHub 토큰을 복사해 저장하지 않습니다.

  • .local/에는 개인 코드·연결 키·댓글 상태·MCP 연결 파일이, wyea-workflow.config.json에는 저장소·배포 URL 설정이 저장됩니다. 모두 .gitignore 대상입니다.

  • 질문·댓글은 사용자가 설정한 GitHub 저장소에, 메일 내용은 Google과 수신 메일 서비스에 전달됩니다. 메일 본문에 민감한 내용을 넣지 마세요. 패턴 검사는 일부 전화번호·비밀값 등을 차단하지만 모든 개인정보를 알아낼 수는 없습니다.

  • Apps Script 웹 앱 URL과 연결 키를 함께 공개하지 마세요. 준비된 코드를 붙여넣은 뒤 클립보드를 다른 내용으로 덮어쓰는 것이 좋습니다.

  • 하나의 이슈에 대한 대기는 한 프로세스가 맡으세요. 여러 에이전트가 동시에 같은 상태 파일을 수정하는 분산 잠금 기능은 없습니다.

문제 해결

증상

해결

gh를 찾지 못함

GitHub CLI 설치 후 터미널을 다시 열기

GitHub 인증/권한 오류

gh auth status 확인. 계정·비공개 저장소 접근·담당자 권한 확인

공개 저장소라 거부됨

코드 배포 저장소가 아닌 별도의 비공개 작업 이슈 저장소를 지정

Apps Script 연결 실패/HTML 응답

/dev가 아닌 /exec 주소인지, 실행 사용자와 “모든 사용자” 액세스인지 확인

forbidden

.local/Code.gs의 최신 키와 실제 배포 버전이 같은지 확인. 편집만 하고 새 버전 배포를 생략하지 않기

메일이 안 옴

결과의 mail과 .local/state/issue-N.json의 mailAttempts 확인. 추가 질문에 메일 도구를 호출했는지 확인. ok:true여도 수신함·필터·스팸 및 Google 할당량은 별도 확인. 원인을 단정하거나 자동 재발송하지 않기

메일이 두 통 옴

create_issue/새 ask 뒤 notify를 중복 호출했는지 확인

대기 도중 앱 시간초과

maxWaitSec를 앱의 제한보다 짧게 설정(예: 45). 이후 이슈 번호만 넣어 다시 대기

모델명 접두사 오류

제목 맨 앞에 AUTH:LLM(실제모델명-high)처럼 실제 모델·추론 강도 입력

도구 수정이 반영되지 않음

실행 중인 MCP 연결을 다시 시작

메일은 배포한 Google 계정의 Apps Script 할당량을 따릅니다.

개발 및 검증

npm ci
npm test
node setup.mjs --help

테스트는 GitHub·메일·Apps Script 객체를 모의 구현으로 대체합니다. 실제 이슈 생성이나 메일 발송은 하지 않습니다. CI는 Windows와 Linux의 Node.js 22/24에서 실행합니다. 각 사용자의 Google 조직 정책·최초 권한 승인과 실제 메일 도착은 설치 후 별도로 확인해야 합니다.

실험용 ACP 프로브는 기존 개발 도구를 보존한 별도 실험입니다. 기본 MCP의 설치·사용에는 필요 없으며 자동 승인 중계 기능이 완성됐다는 뜻이 아닙니다.

라이선스

MIT. 의존 패키지에는 각각의 라이선스가 적용됩니다.

Available Tools

9 tools
wyea_ask대표에게 결정 하나 묻고 답 받기A

결정이 필요할 때 이것 하나로 끝냅니다: (새 이슈 생성 또는 issue 에 댓글) → 메일 → 새 댓글 대기 → 답변 첫 줄 해석 → 기준 갱신. 결과 status: answered(decision: approve|deny|choice|text, text=댓글 전문, choice={index,id,label}) / timeout(wyea_ask({issue}) 만 그대로 다시 호출, 메일 재발송 없음) / no-baseline. question 없이 issue 만 주면 재대기입니다. 질문·선택지·상태에 개인정보·비밀값을 넣지 마세요(서버가 거부). 호출 한 번이 최대 maxWaitSec 동안 이어지므로 클라이언트의 MCP 도구 시간 제한이 그보다 커야 합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNo묻는 도구 이름(claude, codex 등). 본문에 표시. 제목의 AUTH:LLM 접두사와 별개. 생략하면 WYEA_AGENT 설정값
issueNo기존 이슈에 이어서 물을 때(질문을 댓글로 남김), 또는 timeout 뒤 재대기
titleNo새 이슈는 AUTH:LLM(Modelname-thinkinglevel) 으로 시작하는 제목 필수. 기존 이슈의 추가 질문이면 생략 가능
contextNo현재 상태(커밋·브랜치·배포 확인 등). 개인정보·비밀값 금지
optionsNo선택지. 대표는 번호(또는 id)로 답함. 생략 가능
questionNo물을 내용(마크다운). 무엇을 왜 결정해야 하는지. 생략하면 issue 의 답을 다시 기다리기만 함
maxWaitSecNo이번 호출의 최대 대기(초). 기본 480
intervalSecNo확인 간격(초). 기본 60
allowFreeTextNo선택지·승인/거부 외의 자유 지시도 받을지(기본 true)

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the blocking nature (up to maxWaitSec), the result states (answered with decision/text/choice shape, timeout, no-baseline), the no-email-resend semantics on retry, and a server-side rejection of secrets/PII. It even flags the client timeout prerequisite, which is exactly the operational context an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite the tool's complexity, the text is front-loaded with the purpose and then the flow, statuses, and constraints in tightly packed sentences. It is dense but each clause carries information (workflow, statuses, retry, safety, timeout), with little wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter blocking decision workflow with no output schema, the description covers the flow, the three result statuses, retry behavior, and safety constraints, which is nearly everything an agent needs. It lists 'no-baseline' as a status without explaining what it means, a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter (baseline 3). The description adds cross-parameter behavior the schema cannot express: giving only 'issue' without 'question' triggers a re-wait, and 'issue' alone is the timeout re-call form. This meaningfully exceeds the schema's per-field documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('대표에게 결정 하나 묻고 답 받기') and lays out the full flow (create issue/comment → email → wait → parse reply → update baseline), so an agent understands exactly what it does. It does not explicitly name sibling tools like wyea_create_issue or wyea_wait to route against them, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'결정이 필요할 때' gives a clear triggering condition, and the description explains the timeout re-call path ('wyea_ask({issue}) 만 그대로 다시 호출, 메일 재발송 없음') and the question-less re-wait case. It never explicitly contrasts itself with the sibling issue/comment/wait tools, so alternatives remain implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_check새 댓글 한 번만 확인A
Read-only

기다리지 않고 기준(seen) 대비 새 댓글·수정된 댓글을 한 번 확인합니다. 기준이 없으면 baseline:false 를 돌려줍니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueYesGitHub 이슈 번호(비공개 레포 )

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses genuinely useful behavioral traits: the operation is non-blocking, it is single-shot ('한 번'), it compares against a 'seen' baseline, and it returns baseline:false when no baseline exists. It does not state whether the call itself advances/consumes the baseline, which is a notable gap for a stateful check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the non-blocking constraint front-loaded, and the fallback return case stated second. No filler, though the sentence density around the 'seen' baseline could be slightly clearer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return-contract burden, and it only partially does so (it names baseline:false but not the normal result shape). It also omits whether the baseline is updated on a successful check. Adequate but with clear gaps for a stateful polling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'issue' parameter, so the schema already carries the parameter meaning. The description introduces the '기준(seen)' baseline concept, but 'seen' is not an input parameter, so it does not deepen parameter semantics; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (확인/check) and resource (새 댓글·수정된 댓글, new/edited comments) and adds a key scope qualifier: it does not wait (기다리지 않고). This implicitly distinguishes it from the blocking sibling wyea_wait, but no sibling is named explicitly, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase '기다리지 않고' (without waiting) implies the use case is a non-blocking poll as opposed to a waiting tool, and it covers the no-baseline case. However it never explicitly states when to choose this over wyea_wait or wyea_snapshot, leaving the routing guidance implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_close이슈 닫기A

(선택) 마무리 댓글을 남기고 이슈를 닫습니다. 대표가 닫으라고 했거나 요청이 완전히 처리된 뒤에만 사용합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueYesGitHub 이슈 번호(비공개 레포 )
commentNo마무리 댓글(선택)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It conveys the consequential nature of the action and the authorization precondition, but says nothing about required permissions, whether the close is reversible/reopenable, or whether the comment is posted before the state change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the action and the optional comment come first, then the usage constraint. No filler and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no annotations, so the description must stand alone. The usage precondition is covered well, but side effects, permission needs, and failure behavior for this state-changing operation are left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters, so the schema already documents 'issue' (GitHub issue number) and 'comment' (optional closing comment). The description only restates the optionality of the comment and adds no format or range detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('이슈를 닫습니다' - close the issue) plus the optional closing comment. It is distinguishable from read-oriented siblings like wyea_status or wyea_check, though it never names any sibling such as wyea_comment, which also writes to an issue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit, prescriptive precondition: use only when the representative (대표) directed the close, or once the request is fully handled. That is a clear when-to-use rule rather than an implied one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_comment이슈에 댓글 남기기A

작업 결과·진행 보고를 이슈 댓글로 남깁니다. 보고는 커밋 해시·바뀐 파일·배포 확인 결과만 짧게. 개인정보·비밀값이 있으면 서버가 거부합니다. 남긴 댓글은 상태 파일 own 에 기록되어 이후 wyea_wait/wyea_check 에 새 댓글로 잡히지 않습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes댓글 본문(마크다운)
issueYesGitHub 이슈 번호(비공개 레포 )

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that the server rejects personal data/secrets, and that posted comments are recorded in the 'own' status file so they will not resurface as new comments via wyea_wait/wyea_check. It omits auth/permission requirements and rate limits, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action (post a report comment), followed by content rules and behavioral caveats. Efficient, though the middle content rules could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter comment tool with no output schema and no annotations, the description covers side effects, validation behavior, and interaction with sibling tools, which is enough for an agent to call it correctly. Minor omissions are permission requirements and confirmation of success behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the two parameters (issue number, markdown body) are already documented in the schema. The description's content guidance (commit hash, files, deployment result) loosely informs what the body should contain but adds no format or constraint semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('작업 결과·진행 보고를 이슈 댓글로 남깁니다' – leave work/progress reports as an issue comment), which is far more specific than the title alone. It does not explicitly name sibling tools as alternatives (e.g. wyea_create_issue vs wyea_comment), but the resource-action pair is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear positive usage context (post work results/progress) and content rules (keep it short with commit hash, changed files, deployment verification). It does not say when NOT to use this tool or point to a sibling alternative, so it stops short of the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_create_issue개입 요청 이슈 만들기A

비공개 레포에 대표 개입 요청 이슈를 만들고 대표를 담당자로 지정합니다. 본문에는 상황·필요한 결정·선택지·현재 상태만 적습니다(개인정보·비밀값 금지). 생성 직후 Apps Script 메일을 1회 요청하고 mail 결과를 반환합니다. 별도 wyea_notify 를 이어 호출하지 마세요. 제목 맨 앞 AUTH:LLM(Modelname-thinkinglevel) 필수. mail.ok 는 받은편지함 도착 증명이 아닙니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes이슈 본문(마크다운). 무엇을 왜 결정해야 하는지, 선택지, 지금 상태.
agentNo묻는 도구 이름(claude, codex 등). 본문에 표시. 제목의 AUTH:LLM 접두사와 별개. 생략하면 WYEA_AGENT 설정값
titleYesAUTH:LLM(Modelname-thinkinglevel) 제목. 실제 모델과 추론 강도를 적어야 합니다.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does well: it discloses that the issue lands in a private repo, that a representative is assigned, that an Apps Script mail is fired exactly once and its result returned, and it warns that mail.ok is not proof of inbox delivery. It omits permission/auth requirements and failure behavior, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: purpose and assignment first, then body-content rules, then mail side effect, then the no-notify instruction, then the title prefix rule, then the mail.ok caveat. No filler and the most important constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is unusually complete: it explains the created artifact, the automatic mail step, the returned mail result, and the mail.ok semantics. Only auth/permission preconditions and error handling are missing, which is a minor gap given the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the body must avoid PII and secrets, must state situation/decision/options/status, and the title must begin with the AUTH:LLM(Modelname-thinkinglevel) prefix reflecting real model and reasoning level. These are usage constraints the schema only partially encodes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (create an intervention-request issue in a private repo) plus the side effect of assigning the representative as assignee. It also explicitly distinguishes itself from the sibling wyea_notify by telling the agent not to chain that call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance: use this tool and do NOT additionally call wyea_notify, since the mail is already triggered once here. It also prescribes what belongs in the body. It does not, however, contrast itself with other siblings such as wyea_ask or wyea_check, so the when-to-use picture is only partly complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_notify대표에게 메일 알림 + 댓글 기준 잡기A

(선택) 이슈에 댓글을 남기고, 기존 대기 기준(seen)을 보존하고(없으면 생성) MailApp 알림 메일을 설정한 수신 이메일 로 보냅니다. 메일 제목 앞에는 서버가 "[WYEA 작업] "을 붙입니다. 결과 mail.ok 가 false 면 재시도하지 말고 note 대로 진행합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes메일 본문(평문). 이슈 URL과 "댓글로 답해 달라"는 문장은 서버가 뒤에 붙입니다.
issueYesGitHub 이슈 번호(비공개 레포 )
commentNo메일 전에 이슈에 남길 댓글(선택). 요청 내용을 이슈에도 남길 때 사용.
subjectYes메일 제목(200자 이내)

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that the server prepends '[WYEA 작업] ' to the subject, appends the issue URL and a 'reply as comment' sentence to the body, preserves the existing seen baseline (creating it if absent), and prescribes error handling (do not retry when mail.ok is false). It does not state authentication requirements or rate limits, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with no filler; the optionality and the core action are front-loaded, followed by the server-side transformations and the failure-handling rule. Slightly dense but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no annotations and no output schema, the description covers the side effects (comment, seen baseline, email) and the one failure signal it references (mail.ok). It is nearly complete, though it could clarify what the tool returns on success beyond the mail.ok flag.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters in detail (length limits, exclusiveMinimum, server-appended text). The description adds only marginal framing (comment optionality, seen baseline), consistent with the baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete set of actions (leave an optional comment, preserve/create the 'seen' baseline, send a MailApp notification email) which is far more specific than the name alone. It stops short of differentiating itself from close siblings like wyea_comment or wyea_ask, which the agent must disambiguate unaided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(선택)' marks the comment as optional and the schema note says to use the comment field when the request should also be logged on the issue, but there is no tool-level when-to-use guidance or comparison to the sibling tools (wyea_comment, wyea_ask, wyea_status). The agent gets no explicit condition selecting this tool over the alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_snapshot댓글 기준 갱신B

현재 댓글 전체를 기준(seen)으로 저장합니다. 새 댓글을 읽고 반영한 뒤, 또는 메일 없이 기다리기만 할 때 사용합니다. 상태 파일은 stateDir/issue-<번호>.json (Codex Wyea-Workflow.ps1 과 같은 형식).

ParametersJSON Schema
NameRequiredDescriptionDefault
issueYesGitHub 이슈 번호(비공개 레포 )

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the mutation (writing the seen baseline) and the exact state-file path/format (stateDir/issue-<number>.json, matching Codex Wyea-Workflow.ps1). It does not cover permissions, behavior if the issue is missing, or the return value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loading the core action before usage and file details. Each sentence roughly earns its place, though the parenthetical about the file format is the least essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool the description covers purpose, usage, and the side effect of writing a state file. With no annotations and no output schema, it should say more about return values and failure/permission behavior, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'issue' parameter is already documented, making 3 the baseline. The description adds only a small corroboration by showing the issue number maps into the state-file filename ('issue-<번호>').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: saving the current full set of comments as the '(seen)' baseline. It clearly conveys what the tool does, but it never names or contrasts itself with siblings like wyea_check or wyea_wait, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives two usage situations ('after reading and reflecting on new comments' or 'when waiting without mail'), which is implied-but-real guidance. However, it does not explicitly name alternatives or state when NOT to use this versus wyea_check/wyea_wait, leaving the routing decision partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_status사전 점검A
Read-only

설정·비밀 파일·gh 인증·레포 비공개 여부·알림 웹앱 응답·상태 파일을 한 번에 확인합니다. 작업 시작 전에 먼저 호출하세요. ready:false 면 problems 를 대표에게 보고하고 멈춥니다. 비밀값은 절대 반환하지 않습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already signals a safe read; the description adds a meaningful behavioral guarantee on top of it ('비밀값은 절대 반환하지 않습니다') that an agent needs in order to trust handling the output. It does not describe latency, retries, or failure modes beyond the ready flag, keeping it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is checked, then the invocation timing, then the handling rule. Every sentence carries information, though the opening list is dense and could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no params, the description does helpful work by surfacing the 'ready'/'problems' fields an agent will encounter and stating the safety property of the response. It is close to complete, missing only return-shape detail that a schema would otherwise supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies; there is no parameter surface for the description to clarify or obscure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (사전 점검 / check) and enumerates exactly what is inspected: settings, secret files, gh auth, repo privacy, webapp response, and the status file. It positions itself as the pre-flight step, but it never explicitly distinguishes itself from the similarly named sibling wyea_check, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('작업 시작 전에 먼저 호출하세요') and a concrete follow-up rule for the failure case ('ready:false 면 problems 를 대표에게 보고하고 멈춥니다'). That is strong when-to-use guidance, though no sibling alternative or when-not condition is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wyea_wait새 댓글 기다리기A
Read-only

기준(seen) 이후 새로 달리거나 수정된 댓글이 나올 때까지 intervalSec(기본 60초)마다 확인합니다(도구 자신이 단 댓글은 제외). 새 댓글이 있으면 changed 배열(작성자·본문·URL·첫 줄 해석 decision)을 돌려주고 기준을 갱신하지 않습니다(반영 후 wyea_snapshot 으로 갱신). maxWaitSec(기본 480초) 동안 없으면 timeout:true 로 돌아오니 다시 호출하세요. 호출 한 번이 길게 이어지므로 클라이언트의 MCP 도구 시간 제한이 maxWaitSec 보다 커야 합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
issueYesGitHub 이슈 번호(비공개 레포 )
maxWaitSecNo이번 호출의 최대 대기(초). 기본 480
intervalSecNo확인 간격(초). 기본 60

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation only declares readOnlyHint=true, and the description adds substantial behavior beyond that: own comments are excluded, the baseline is deliberately NOT advanced, timeout returns timeout:true, and the client timeout prerequisite is spelled out. That is exactly the kind of operational context an agent cannot get from the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph that front-loads the core behavior (polls until new comments) then layers timeout, baseline, and client-timeout caveats. Every clause carries information, though it is on the long side and would benefit from separation into distinct sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must carry return semantics, and it does: it names the changed array fields (author, body, URL, decision) and the timeout:true shape. Combined with the polling prerequisites, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents the three params and their defaults, so baseline is 3. The description adds behavioral meaning: intervalSec governs the polling cadence and maxWaitSec governs when the timeout return fires, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: it polls and waits for new or modified comments after the 'seen' baseline. It also carves out scope that separates it from siblings (excludes the tool's own comments, and explicitly names wyea_snapshot as the baseline updater). An agent can distinguish this from wyea_check/wyea_status without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating guidance: call again on timeout:true, update the baseline via wyea_snapshot after processing, and ensure the client MCP timeout exceeds maxWaitSec. It does not explicitly say when NOT to use this versus plain wyea_check, but the polling/wait semantics are unambiguous.

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.

  1. 9 tool updatesv1.3.0
    • First observedwyea_ask
    • First observedwyea_check
    • First observedwyea_close
    • First observedwyea_comment
    • First observedwyea_create_issue
    • First observedwyea_notify
    • First observedwyea_snapshot
    • First observedwyea_status
    • First observedwyea_wait

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation3/5

The baseline/seen polling model is spread across wyea_check, wyea_wait, wyea_snapshot, and wyea_ask, and mail sending appears in wyea_create_issue, wyea_notify, and wyea_ask, creating real overlap. Descriptions explicitly warn against calling some together (e.g. not calling wyea_notify after wyea_create_issue), which mitigates but does not eliminate misselection risk.

Naming Consistency4/5

All tools share a consistent wyea_ prefix with clear, mostly single-word verbs or short verb_noun names (wyea_create_issue). Minor deviation: some are nouns/short tokens (wyea_status, wyea_wait) while others are actions, but the pattern is still readable and predictable.

Tool Count4/5

Nine tools is a reasonable, well-scoped size for a comment/decision workflow. A few tools (wyea_ask vs wyea_wait/wyea_snapshot, wyea_notify vs wyea_create_issue) are somewhat redundant, so not every tool strictly earns its place.

Completeness4/5

The surface covers the lifecycle: status check, issue creation, commenting, notifying, waiting, baseline snapshots, and closing. Minor gaps exist (no update/edit or reopen, no issue listing/get), but core agent workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • -
    license
    B
    quality
    Not graded
    maintenance
    Enables AI-driven orchestration of GitHub development workflows including automated issue analysis, code generation, code review, and PR creation through multiple specialized agents. Integrates with GitHub Actions to automate the complete development process from issue to pull request.
    7
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to request user decisions and send notifications via Discord when human intervention is required during autonomous tasks. It supports blocking questions with custom options, progress reporting, and persistent state for seamless remote task management.
    8
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that enables AI agents to pause and request human approval or information via Slack, Telegram, or macOS dialogs before proceeding with actions.
    2
    15
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that lets an AI coding agent pause on human-only tasks, request structured input via a form, and resume with the answer, all locally without cloud dependencies.
    -