5cfb8a1이 .gitignore에 docs/를 넣고 68개 파일을 지웠다. 그런데
AgentBuilderContractExampleTest, ToolBundleContractExampleTest,
ArchitectureDocumentContractTest는 docs/ 아래 계약 예제와 architecture
문서를 입력으로 직접 읽는다. 그 결과 clean clone에서 테스트 10건이
입력을 찾지 못해 실패했다.
제외 범위를 원래 의도대로 좁힌다. 에이전트 산출물(AGENTS.md, .agents/,
.codex/, docs/superpowers/)은 계속 제외하고 저장소 문서는 추적한다.
문서는 삭제 직전 상태(3de052a)를 기준으로 복원하고, 그 위에 main 코드와
대조해 어긋난 부분을 고쳤다.
- ADR-0007을 Superseded로 바꾸고 ADR-0013을 새로 쓴다. route당 Tool
Service N개가 최종안이며, PortalToolRegistryClient가 이미 route별로
N개를 유지하고 있는데 ADR-0007은 "bundles는 항상 한 항목"을 Accepted
상태로 주장하고 있었다. ADR-0009 결정 4도 부분 대체한다.
- ADR-0008 파일 헤더가 Accepted였으나 ADR-0009가 이미 대체한 상태였다.
- 6078852의 endpoint 소유권 반전이 반영되지 않은 서술을 계약 v0.2,
bundle 설정 예제, Tool 적재 안내에서 고친다.
- Portal registry 계약 v0.1과 route key 규약을 새로 문서화한다. 둘 다
구현은 있는데 계약 문서가 없었다.
- MCP SDK 2.0.0 SBOM을 추가한다.
번호 주석: ADR-0011과 0012는 feature/mcp-integration이 Tool inputSchema
정책에 쓰고 있어 비워 둔다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
184 lines
9.5 KiB
Markdown
184 lines
9.5 KiB
Markdown
# 관찰 로그 01 - exa / `web_search_exa`
|
|
|
|
- 출처: `MCP_툴_호출_통신_로그_(JSON-RPC) (1).pdf`
|
|
- 원본 생성 시각: 2026-07-13 17:10:33 UTC
|
|
- 성격: Agent Builder 솔루션에서 수행한 관찰용 실행 로그. 본 문서는 구현 계약이나 테스트 fixture가 아니다.
|
|
|
|
## 헤더 및 실행 메타데이터
|
|
|
|
| 항목 | 원본 기록 값 |
|
|
|---|---|
|
|
| transport type | `mcp-http` |
|
|
| request_id | `045992d3-9683-4409-9613-e355a3eb05e1` |
|
|
| tool_uid | `f44207bd-9afb-4bbe-88d7-1cadf9e2779b` |
|
|
| Tool version | `2.0` |
|
|
| 실행 시각 | 2026-07-13 16:53:16 UTC |
|
|
| 결과 | ok · 1896ms · truncated=False |
|
|
| JSON-RPC 프레임 수 | 5 |
|
|
| lifecycle | `initialize → notifications/initialized → tools/call` |
|
|
|
|
### HTTP 헤더 기록 범위
|
|
|
|
원본 PDF에는 개별 HTTP request/response header 값이 기록되어 있지 않다. 원본 표의 `request_id`, `tool_uid`, `version`은 실행 메타데이터이며 HTTP header라고 단정하지 않는다.
|
|
|
|
원본 공통 안내에는 시크릿 및 인증 header가 로깅 전에 `[REDACTED]`로 마스킹되었다고 명시되어 있다. 따라서 Authorization, `Mcp-Session-Id` 등 실제 HTTP header 값은 이 문서에 포함하지 않는다.
|
|
|
|
## JSON-RPC 통신 전문
|
|
|
|
아래는 원본 PDF의 JSON-RPC 프레임을 순서대로 옮긴 전사본이다. 긴 `result.content[].text` 문자열은 PDF의 시각적 줄바꿈을 보존했으므로, 이 블록 전체를 기계 실행용 단일 JSON payload로 사용하지 않는다.
|
|
|
|
```text
|
|
16:53:16 요청 → initialize
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": 1,
|
|
"method": "initialize",
|
|
"params": {
|
|
"protocolVersion": "2025-06-18",
|
|
"capabilities": {},
|
|
"clientInfo": {
|
|
"name": "toolbox-executor",
|
|
"version": "0.1.0"
|
|
}
|
|
}
|
|
}
|
|
16:53:16 ← 응답 initialize
|
|
{
|
|
"result": {
|
|
"protocolVersion": "2025-06-18",
|
|
"capabilities": {
|
|
"tools": {
|
|
"listChanged": true
|
|
},
|
|
"prompts": {
|
|
"listChanged": true
|
|
},
|
|
"resources": {
|
|
"listChanged": true
|
|
}
|
|
},
|
|
"serverInfo": {
|
|
"name": "exa-search-server",
|
|
"title": "Exa",
|
|
"version": "3.2.1",
|
|
"websiteUrl": "<https://exa.ai>",
|
|
"icons": [
|
|
{
|
|
"src": "<https://exa.ai/images/favicon-32x32.png>",
|
|
"mimeType": "image/png",
|
|
"sizes": [
|
|
"32x32"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"jsonrpc": "2.0",
|
|
"id": 1
|
|
}
|
|
16:53:16 요청 → notifications/initialized
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "notifications/initialized"
|
|
}
|
|
16:53:17 요청 → tools/call
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"id": 3,
|
|
"method": "tools/call",
|
|
"params": {
|
|
"name": "web_search_exa",
|
|
"arguments": {
|
|
"query": "most popular useless github repository stars useless repo",
|
|
"numResults": 10.0
|
|
}
|
|
}
|
|
}
|
|
16:53:18 ← 응답 tools/call
|
|
{
|
|
"result": {
|
|
"content": [
|
|
{
|
|
"type": "text",
|
|
"text": "Title: btahir/uselesshooks\nURL: <https://github.com/btahir/uselesshooks\nPublished:
|
|
> N/A\nAuthor: N/A\nHighlights:\n# btahir/us\n...\n- Stars: 125\n- Forks: 9\n- Watchers: 125\n- Open
|
|
issues: 3\n- License: MIT License\n- Default branch: main\n- Created: 2022-12-18T03:03:19Z\n\n---\n\n
|
|
Title: Useless-Garbage-Institute/useless-garbage\nURL: <https://github.com/Useless-Garbage-Institute/
|
|
useless-garbage\nPublished:> 2015-08-27T22:14:06.000Z\nAuthor: N/A\nHighlights:\n# Repository: Useles
|
|
s-Garbage-Institute/useless-garbage\n...\nThe most profoundly useless javascript library ever invente
|
|
d.\n...\n- Stars: 6\n- Forks: 1\n- Watchers: 6\n- Open issues: 1\n- Primary language: JavaScript\n- L
|
|
anguages: JavaScript\n- Default branch: master\n- Created: 2015-08-27T22:14:06Z\n- Last push: 2015-09
|
|
-01T01:14:37Z\n- Contributors: 2 (top: kriztynna, cgalbiati)\n...\nThe useless-garbage library is the
|
|
only npm module that is guaranteed to have no redeemable functionality whatsoever. There are plenty o
|
|
f helpful JavaScript libraries out there, and some that are of questionable utility, but none that ar
|
|
e share our commitment to utter uselessness.\n\n---\n\nTitle: tomekw/whatever\nURL: <https://github.c
|
|
om/tomekw/whatever\nPublished:> N/A\nAuthor: N/A\nHighlights:\n- Stars: 281\n- Forks: 115\n- Watcher
|
|
s: 281\n- Open issues: 2\n- Default branch: master\n- Created: 2014-10-10T15:51:31Z\n\n---\n\nTitle:
|
|
thecodersroom/the-button-that-does-nothing\nURL: <https://github.com/thecodersroom/the-button-that-do
|
|
es-nothing\nPublished:> 2025-10-06T18:39:22.000Z\nAuthor: N/A\nHighlights:\n# Repository: thecodersro
|
|
om/the-button-that-does-nothing\n...\nthat looks important\n...\nliterally does nothing\n...\n- Star
|
|
s: 21\n- Forks: 67\n- Watchers: 0\n- Open issues: 24\n- Primary language: JavaScript\n- Languages: Ja
|
|
vaScript (45.4%), CSS (41.9%), HTML (12.7%)\n- License: MIT License (MIT)\n- Topics: css, hacktoberfe
|
|
st, hacktoberfest-accepted, html, javascript\n- Default branch: main\n- Homepage: <https://thecodersr
|
|
oom.github.io/the-button-that-does-nothing/\n-> Created: 2025-10-06T18:39:22Z\n- Last push: 2025-11-0
|
|
4T09:02:47Z\n- Contributors: 60 (top: AbdulKhadhar, AdZard69, Moksh-Mutreja, AshaSaini-033, akshith28
|
|
55, kronpatel, ahmedrazabaloch, AhishRagav, Nl-T-lN, vanshikap21)\n...\nbuilt entirely with **\n\n---
|
|
\n\nTitle: GitHub - niltok64/the-useless-collection: A collection of software that serve no purpose o
|
|
ther than waste your time. Forking is encouraged!\nURL: <https://github.com/niltok64/the-useless-coll
|
|
ection\nPublished:> 2021-11-30T09:35:25.000Z\nAuthor: niltok64\nHighlights:\n64/the\n...\nuseless-col
|
|
lection\n...\n[\nStar\n1\n](<https://github.com/login?return_to=/niltok64/the-useless-collection>)\n*
|
|
\nA collection of software that serve no purpose other than waste your time. Forking is encouraged!\n
|
|
[niltok64.github.io/the-useless-collection/](<https://niltok64.github.io/the-useless-collection/>)\n#
|
|
## License\n...\nstar\n](<https://github.com/niltok64/the-useless-collection/stargazers>) [\n0
|
|
\n...\n://github.com/niltok64/the-useless-collection/forks)\n...\n://github.com/niltok64/the-useless-
|
|
collection/branches) [\n...\n://github.com/niltok64/the-useless-collection/tags) [\nActivity
|
|
\n...\n://github.\n...\n/nilt\n...\nthe-useless-collection\n...\n[\n**1**\nstar\n](<https://github.co
|
|
m/niltok64/the-useless-collection/stargazers>)\n...\n### Watchers\n\n---\n\nTitle: GitHub - needless-
|
|
org/needless: The JavaScript library you never asked for, never needed, and probably shouldn't use. B
|
|
ut here we are!\nURL: <https://github.com/needless-org/needless\nPublished:> 2023-09-05T14:04:16.000Z
|
|
\nAuthor: needless-org\nHighlights:\nGitHub - needless-org/needless: The JavaScript library you never
|
|
asked for, never needed, and probably shouldn't use. But here we are!\n...\n[Skip to\n...\nneedless-o
|
|
rg/needless)\n...\nhttps://github\n...\ncom/login?return_to=/needless-org/needless)\n...\n[\nStar\n1
|
|
\n](<https://github.com/login?return_to=/needless-org/needless>)\n*\nThe JavaScript library you never
|
|
asked for, never needed, and probably shouldn't use. But here we are!\n...\n[\n1\nstar\n](<https://gi
|
|
thub.com/needless-org/needless/stargazers>) [\n0\nforks\n](<https://github.com/needless-org/needless/
|
|
forks>) [\nBranches\n](<https://github.com/needless-org/needless/branches>) [\nTags\n](<https://githu
|
|
b.com/needless-org/needless/tags>) [\nActivity\n](<https://github.com/needless-org/needless/activity
|
|
>)\n[\n...\nneedless-\n...\nneedless)\n...\nThe JavaScript library you never asked for, never needed,
|
|
and probably shouldn't use. But here we are!\n...\n\"My project is running too\n...\nwish there was
|
|
\n...\nadd some completely unnecessary\n...\nno further!\n...\nIntroducing `needless-js`, the world's
|
|
first and foremost pointless library. We bring the \"Why?\" into \"Why is this even a thing?\".\n## F
|
|
eatures\n...\n1. **Absolutely Useless**: Doesn't fix any problems because it doesn't know what proble
|
|
ms are.\n2. **Hilariously Redundant**: Why have one function when you can have ten doing the same thi
|
|
ng?\n3. **Zero Dependencies**: Mainly because no other library wants to be associated with us.\n4. **
|
|
Eco-friendly**: Uses 0% CPU because it does absolutely nothing.\n## Installation\n...\n[\n**1**\nstar
|
|
\n...\n](<https://github.com/needless-org/needless/stargazers>)\n\n---\n\nTitle: GitHub - terremoth/a
|
|
wesome-hilarious-repos\nURL: <https://github.com/terremoth/awesome-hilarious-repos\nPublished:> N/A\n
|
|
Author: N/A\nHighlights:\nAwesome Hilarious Github Repositories. Awesome license. GitHub contributor
|
|
s. List of all (?) available and funniest Github repos. Contribute if you know others!\n\n---\n\nTitl
|
|
e: SuavePirate/Xamarin.Yeet\nURL: <https://github.com/SuavePirate/Xamarin.Yeet\nPublished:> 2020-02-2
|
|
2T21:16:23.000Z\nAuthor: N/A\nHighlights:\n# Repository: SuavePirate/Xamarin.Yeet\n...\nAn absolutely
|
|
useless tool to yeet your components off the screen.\n...\n- Stars: 2\n- Forks: 1\n- Watchers: 1\n- O
|
|
pen issues: 0\n- Primary language: C#\n- Languages: C#\n- License: MIT License (MIT)\n- Default branc
|
|
h: master\n- Created: 2020-02-22T21:16:23Z\n- Last push: 2020-02-22T21:31:11Z\n- Contributors: 1 (to
|
|
p: SuavePirate)\n...\nAn absolutely useless tool to yeet your components off the screen.\n\n---\n\nTi
|
|
tle: nico-garnier/useless-repo\nURL: <https://github.com/nico-garnier/useless-repo\nPublished:> 2020-
|
|
12-03T11:49:46.000Z\nAuthor: N/A\nHighlights:\n# Repository: nico-garnier/useless-repo\n...\n- Stars:
|
|
1\n- Forks: 0\n- Watchers: 2\n- Open issues: 0\n- Default branch: main\n- Created: 2020-12-03T11:49:4
|
|
6Z\n- Last push: 2020-12-03T14:16:57Z\n- Contributors: 2 (top: nico-garnier, eilenilec)\n...\n# usele
|
|
ss-repo\n...\nFor github stat on top collaborators only.\n\n---\n\nTitle: elierotenberg/useless | Git
|
|
Hub | Open Source Insights\nURL: <https://deps.dev/project/github/elierotenberg%2fuseless\nPublished:
|
|
> N/A\nAuthor: N/A\nHighlights:\nelierotenberg/useless | GitHub | Open Source Insights\n...\n# eliero
|
|
tenberg/useless\n...\n33 stars",
|
|
"_meta": {
|
|
"searchTime": 1071.9
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"jsonrpc": "2.0",
|
|
"id": 3
|
|
}
|
|
```
|
|
|