opencode / packages /web /src /content /docs /ko /mcp-servers.mdx
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
0dbc9de verified
Raw History Blame Contribute Delete
14.4 kB
---
title: MCP ์„œ๋ฒ„
description: ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ MCP ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
---
Model Context Protocol , ๋˜๋Š” MCP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ opencode์— ์™ธ๋ถ€ ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. opencode๋Š” ๋กœ์ปฌ ๋ฐ ์›๊ฒฉ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋˜๋ฉด MCP ๋„๊ตฌ๋Š” ๋‚ด์žฅ ๋„๊ตฌ์™€ ํ•จ๊ป˜ LLM์— ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
#### ์ฃผ์˜์‚ฌํ•ญ
MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๊ฐ€ ๋งŽ์œผ๋ฉด ์ปจํ…์ŠคํŠธ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฑ„์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” MCP ์„œ๋ฒ„์™€ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
:::tip
MCP ์„œ๋ฒ„๋Š” ๊ท€ํ•˜์˜ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ, ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
:::
GitHub MCP ์„œ๋ฒ„์™€ ๊ฐ™์€ ํŠน์ • MCP ์„œ๋ฒ„๋Š” ๋งŽ์€ ํ† ํฐ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ปจํ…์ŠคํŠธ ์ œํ•œ์„ ์‰ฝ๊ฒŒ ์ดˆ๊ณผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ๊ตฌ์„ฑ
`mcp`์—์„œ MCP ์„œ๋ฒ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ MCP๋ฅผ ๊ณ ์œ  ์ด๋ฆ„์œผ๋กœ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. LLM์„ ํ”„๋กฌํ”„ํŠธํ•  ๋•Œ MCP๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```jsonc title="opencode.jsonc" {6}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"name-of-mcp-server": {
// ...
"enabled": true,
},
"name-of-other-mcp-server": {
// ...
},
},
}
```
`enabled`๋ฅผ `false`๋กœ ์„ค์ •ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. config์—์„œ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
### ์›๊ฒฉ ๊ธฐ๋ณธ๊ฐ’ ์žฌ์ •์˜
์กฐ์ง์€ `.well-known/opencode` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ MCP ์„œ๋ฒ„๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™” ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์„ ํƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์กฐ์ง์˜ ์›๊ฒฉ ์„ค์ •์—์„œ ํŠน์ • ์„œ๋ฒ„๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด `enabled: true`๋กœ ๋กœ์ปฌ ๊ตฌ์„ฑ์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": {
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true
}
}
}
```
๋กœ์ปฌ ์„ค์ • ๊ฐ’์€ ์›๊ฒฉ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [config precedence](/docs/config#precedence-order)๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
---
## ๋กœ์ปฌ
MCP ๊ฐ์ฒด ๋‚ด์—์„œ `type`๋ฅผ `"local"`๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ MCP ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
```jsonc title="opencode.jsonc" {15}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-local-mcp-server": {
"type": "local",
// Or ["bun", "x", "my-mcp-command"]
"command": ["npx", "-y", "my-mcp-command"],
"enabled": true,
"environment": {
"MY_ENV_VAR": "my_env_var_value",
},
},
},
}
```
๋ช…๋ น์€ ๋กœ์ปฌ MCP ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ชฉ๋ก์—์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ํ…Œ์ŠคํŠธ [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) MCP ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
```jsonc title="opencode.jsonc"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"],
},
},
}
```
๊ทธ๋ฆฌ๊ณ  `use the mcp_everything tool`๋ฅผ ๋‚ด ํ”„๋กฌํ”„ํŠธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```txt "mcp_everything"
use the mcp_everything tool to add the number 3 and 4
```
---
#### ์˜ต์…˜
๋กœ์ปฌ MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
| ์˜ต์…˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… |
| ------------- | ------- | ---- | ----------------------------------------------------- |
| `type` | ๋ฌธ์ž์—ด | Y | MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์œ ํ˜•์€ `"local"`. |
| `command` | Array | Y | MCP ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น๊ณผ ์ธ์ˆ˜. |
| `environment` | ๊ฐœ์ฒด | | ์„œ๋ฒ„ ์‹คํ–‰์‹œ ์„ค์ •ํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ |
| `enabled` | boolean | | ์‹œ๋™์—์„œ MCP ์„œ๋ฒ„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ |
| `timeout` | number | | MCP ์„œ๋ฒ„์—์„œ ํƒœํ•‘ํˆด์„ ์œ„ํ•œ ํƒ€์ž„์•„์›ƒ ๊ธฐ๋ณธ 5000 (5 ์ดˆ). |
---
## ์›๊ฒฉ
`type`๋ฅผ `"remote"`๋กœ ์„ค์ •ํ•˜์—ฌ ์›๊ฒฉ MCP ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com",
"enabled": true,
"headers": {
"Authorization": "Bearer MY_API_KEY"
}
}
}
}
```
`url`๋Š” ์›๊ฒฉ MCP ์„œ๋ฒ„์˜ URL์ด๋ฉฐ `headers` ์˜ต์…˜์œผ๋กœ ํ—ค๋” ๋ชฉ๋ก์—์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
#### ์˜ต์…˜
| ์˜ต์…˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… |
| --------- | ------- | ---- | ----------------------------------------------------------- |
| `type` | ๋ฌธ์ž์—ด | Y | MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์œ ํ˜•์€ `"remote"`. |
| `url` | ๋ฌธ์ž์—ด | Y | ์›๊ฒฉ MCP ์„œ๋ฒ„์˜ URL. |
| `enabled` | boolean | | ์‹œ๋™์—์„œ MCP ์„œ๋ฒ„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ |
| `headers` | ๊ฐœ์ฒด | | ํ—ค๋“œ๋Ÿฌ๋Š” ์š”์ฒญ์œผ๋กœ ๋ณด๋‚ด๋“œ๋ฆฝ๋‹ˆ๋‹ค. |
| `oauth` | ๊ฐœ์ฒด | | OAuth ์ธ์ฆ ๊ตฌ์„ฑ [OAuth](#oauth) ์•„๋ž˜์˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. |
| `timeout` | number | | MCP ์„œ๋ฒ„์—์„œ ํƒœํ•‘ํˆด์„ ์œ„ํ•œ ํƒ€์ž„์•„์›ƒ ๊ธฐ๋ณธ 5000 (5 ์ดˆ). |
---
## OAuth
opencode๋Š” ์›๊ฒฉ MCP ์„œ๋ฒ„์— ๋Œ€ํ•œ OAuth ์ธ์ฆ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•  ๋•Œ, opencode๋Š”:
1. 401 ์‘๋‹ต์„ ๊ฒ€์ถœํ•˜๊ณ  OAuth ํ๋ฆ„์„ ์‹œ์ž‘
2. **Dynamic Client ๋“ฑ๋ก (RFC 7591) ** ์„œ๋ฒ„์—์„œ ์ง€์›๋˜๋Š” ๊ฒฝ์šฐ
3. ๋ฏธ๋ž˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ ํ† ํฐ
---
## ์ž๋™ ์„ค์ •
๋Œ€๋ถ€๋ถ„์˜ OAuth-enabled MCP ์„œ๋ฒ„๋ฅผ ์œ„ํ•ด, ํŠน๋ณ„ํ•œ ๊ตฌ์„ฑ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑ:
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
}
}
}
```
์„œ๋ฒ„๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, opencode๋Š” ๋จผ์ € ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ธ์ฆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, `opencode mcp auth <server-name>`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ [์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ](#authenticating)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
### ์‚ฌ์ „๋“ฑ๋ก
MCP ์„œ๋ฒ„ ๊ณต๊ธ‰์ž์˜ ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ์ด์žˆ๋Š” ๊ฒฝ์šฐ, ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {7-11}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MY_MCP_CLIENT_ID}",
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute"
}
}
}
}
```
---
### ์ธ์ฆ
์ธ์ฆ ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠน์ • MCP ์„œ๋ฒ„์™€ ์ธ์ฆ:
```bash
opencode mcp auth my-oauth-server
```
๋ชจ๋“  MCP ์„œ๋ฒ„๋ฅผ ๋‚˜์—ดํ•˜๊ณ  auth ์ƒํƒœ:
```bash
opencode mcp list
```
์ €์žฅ๋œ ์ž๊ฒฉ ์ œ๊ฑฐ:
```bash
opencode mcp logout my-oauth-server
```
`mcp auth` ๋ช…๋ น์€ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ฝ๋‹ˆ๋‹ค. `~/.local/share/opencode/mcp-auth.json`์—์„œ ํ† ํฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
---
#### OAuth ๋น„ํ™œ์„ฑํ™”
์„œ๋ฒ„์˜ ์ž๋™ OAuth๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ (์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€์‹  API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„), `oauth`๋ฅผ `false`๋กœ ์„ค์ •:
```json title="opencode.json" {7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}"
}
}
}
}
```
---
#### OAuth ์˜ต์…˜
| ์˜ต์…˜ | ์œ ํ˜• | ์„ค๋ช… |
| -------------- | ------------- | --------------------------------------------------------------------------- |
| `oauth` | ๊ฐœ์ฒด \| false | OAuth config object, ๋˜๋Š” `false`๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” OAuth ์ž๋™๊ฒ€์ถœ. ยท |
| `clientId` | ๋ฌธ์ž์—ด | OAuth ํด๋ผ์ด์–ธํŠธ ID. ์ œ๊ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋™์  ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก ์‹œ๋„๋ฉ๋‹ˆ๋‹ค. ยท |
| `clientSecret` | String | OAuth ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€, ํ—ˆ๊ฐ€์„œ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ. |
| `scope` | String | OAuth ๋ฒ”์œ„๋Š” ์ธ์ฆ ์ค‘์ž…๋‹ˆ๋‹ค. |
###### ๋””๋ฒ„๊น…
์›๊ฒฉ MCP ์„œ๋ฒ„๊ฐ€ ์ธ์ฆ์— ์‹คํŒจํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```bash
# View auth status for all OAuth-capable servers
opencode mcp auth list
# Debug connection and OAuth flow for a specific server
opencode mcp debug my-oauth-server
```
`mcp debug` ๋ช…๋ น์€ ํ˜„์žฌ auth ์ƒํƒœ๋ฅผ ๋ณด์—ฌ ์ฃผ๋ฉฐ HTTP ์—ฐ๊ฒฐ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  OAuth ๋ฐœ๊ฒฌ ํ๋ฆ„์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
---
## ๊ด€๋ฆฌ
MCP๋Š” opencode์˜ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด์žฅ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ๊ฐ™์ด opencode config๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
## ์ „์—ญ
์ด๋Š” ์ „์—ญ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false
}
}
```
๋˜ํ•œ glob ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  MCP๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {14}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false
}
}
```
์—ฌ๊ธฐ์— ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  MCP๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” glob ํŒจํ„ด `my-mcp*`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
---
## ์—์ด์ „ํŠธ๋ณ„
๋งŽ์€ MCP ์„œ๋ฒ„๊ฐ€ ์žˆ๋‹ค๋ฉด ์ „์—ญ์ ์œผ๋กœ๋Š” ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์—์ด์ „ํŠธ๋ณ„๋กœ๋งŒ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰:
1. ๊ธ€๋กœ๋ฒŒ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
2. [agent config](/docs/agents#tools)์—์„œ MCP ์„œ๋ฒ„๋ฅผ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {11, 14-18}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": true
}
},
"tools": {
"my-mcp*": false
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true
}
}
}
}
```
---
### Glob ํŒจํ„ด
glob ํŒจํ„ด์€ ๊ฐ„๋‹จํ•œ regex globbing ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค :
- `*`๋Š” ์–ด๋–ค ํŠน์„ฑ (์˜ˆ๋ฅผ๋“ค๋ฉด, `"my-mcp*"` ๊ฒฝ๊ธฐ `my-mcp_search`, `my-mcp_list`, ๋“ฑ)์˜ 0๊ฐœ ์ด์ƒ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
- `?`๋Š” ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๋ฌธ์ž ์ผ์น˜
- ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ž ์ผ์น˜ ๋ง ๊ทธ๋Œ€๋กœ
:::note
MCP ์„œ๋ฒ„ ๋„๊ตฌ๋Š” ์„œ๋ฒ„ ์ด๋ฆ„์œผ๋กœ prefix๋กœ ๋“ฑ๋ก๋˜๋ฏ€๋กœ ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋„๊ตฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```
"mymcpservername_*": false
```
:::
---
## ์˜ˆ์ œ
๋‹ค์Œ์€ ์ผ๋ฐ˜์ ์ธ MCP ์„œ๋ฒ„์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด PR์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
---
#### Sentry
[Sentry MCP ์„œ๋ฒ„](https://mcp.sentry.dev)๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ Sentry ํ”„๋กœ์ ํŠธ์™€ ๋ฌธ์ œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json" {4-8}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
```
๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ ํ•œ ํ›„, Sentry๋กœ ์ธ์ฆ:
```bash
opencode mcp auth sentry
```
๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์—ด์–ด OAuth ํ๋ฆ„์„ ์™„๋ฃŒํ•˜๊ณ  opencode๋ฅผ Sentry ๊ณ„์ •์— ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค.
์ผ๋‹จ ์ธ์ฆ๋˜๋ฉด, ๋‹น์‹ ์€ ์ฟผ๋ฆฌ ๋ฌธ์ œ, ํ”„๋กœ์ ํŠธ, ์˜ค๋ฅ˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ”„๋ฆฐํŠธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```txt "use sentry"
Show me the latest unresolved issues in my project. use sentry
```
---
### Context7
[Context7 MCP ์„œ๋ฒ„](https://github.com/upstash/context7)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
```
๋ฌด๋ฃŒ ๊ณ„์ •์œผ๋กœ ๊ฐ€์ž…ํ•œ ๊ฒฝ์šฐ API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋†’์€ ์†๋„ ์ œํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```json title="opencode.json" {7-9}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
}
}
}
}
```
์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด `CONTEXT7_API_KEY` ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ธํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ assuming์ž…๋‹ˆ๋‹ค.
Context7 MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `use context7`๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
```txt "use context7"
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
```
๋Œ€์•ˆ์œผ๋กœ, ๋‹น์‹ ์€์ด ๊ฐ™์€ ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
When you need to search docs, use `context7` tools.
```
---
## Grep by Vercel
[Grep by Vercel](https://grep.app) MCP ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ GitHub์—์„œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
```
MCP ์„œ๋ฒ„ `gh_grep`๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ, `use the gh_grep tool`๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
```txt "use the gh_grep tool"
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
```
๋Œ€์•ˆ์œผ๋กœ, ๋‹น์‹ ์€์ด ๊ฐ™์€ ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [AGENTS.md](/docs/rules/).
```md title="AGENTS.md"
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.
```