MCP 통합
Model Context Protocol을 사용하여 JamJet을 외부 도구 서버에 연결합니다.
MCP 통합
JamJet은 Model Context Protocol (MCP)을 최고 수준으로 지원합니다 — AI 에이전트를 외부 도구, 데이터 소스, 서비스에 연결하는 오픈 표준입니다.
MCP란?
MCP는 AI 에이전트가 외부 도구를 발견하고 호출하는 표준 방식을 정의합니다. MCP 서버는 타입이 지정된 스키마로 도구를 노출하고, MCP 클라이언트(JamJet)는 해당 도구를 발견하여 호출합니다.
즉, JamJet을 MCP 호환 도구 서버에 연결할 수 있으며, 웹 검색, 데이터베이스, GitHub, Slack, 파일 시스템 등을 위한 수백 개의 커뮤니티 서버가 있습니다.
MCP 서버 구성
프로젝트 루트의 jamjet.toml에 서버를 추가하세요:
# 로컬 stdio 서버 (개발에서 가장 일반적)
[[mcp.servers]]
name = "brave-search"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-brave-search"]
env = { BRAVE_API_KEY = "${BRAVE_API_KEY}" }
# 로컬 Python 서버
[[mcp.servers]]
name = "my-tools"
command = "python"
args = ["-m", "my_tools.server"]
# 원격 HTTP 서버 (SSE 전송)
[[mcp.servers]]
name = "remote-api"
url = "https://tools.example.com/mcp"
headers = { Authorization = "Bearer ${TOOLS_API_KEY}" }JamJet은 jamjet dev 시작 시 구성된 모든 서버에 연결됩니다.
워크플로에서 도구 사용
YAML
nodes:
search:
type: tool
server: brave-search # jamjet.toml의 `name`과 일치
tool: web_search # MCP 서버의 도구 이름
arguments:
query: "{{ state.query }}"
count: 10
output_key: search_results
next: summarizePython SDK
@node
async def search(self, state: State) -> State:
result = await self.tool(
server="brave-search",
tool="web_search",
arguments={"query": state["query"], "count": 10},
)
return {"search_results": result.content}사용 가능한 도구 확인
연결된 서버의 모든 도구 나열:
jamjet tools listServer: brave-search
web_search(query: str, count: int) → list[SearchResult]
news_search(query: str, freshness: str) → list[NewsItem]
Server: my-tools
run_query(sql: str) → list[dict]
get_schema(table: str) → dict도구를 직접 테스트:
jamjet tools call brave-search web_search --args '{"query": "JamJet runtime", "count": 3}'MCP 서버 구축하기
JamJet은 MCP를 통해 도구를 제공할 수도 있으며, 워크플로를 다른 에이전트가 호출 가능한 도구로 노출합니다.
jamjet.toml에 다음을 추가하세요:
[mcp.server]
enabled = true
port = 7701
workflows = ["my-agent", "research-agent"] # 이들을 도구로 노출노출한 모든 워크플로는 호출 가능한 MCP 도구가 됩니다. 다른 에이전트가 이를 발견하고, 입출력 스키마를 확인하며, 호출할 수 있습니다 — 내부적으로 JamJet이 사용되는지 알 필요 없이 말이죠.
# 런타임과 함께 MCP 서버 시작
jamjet dev --with-mcp-server주요 MCP 서버
| 서버 | 패키지 | 제공 기능 |
|---|---|---|
| Brave Search | @modelcontextprotocol/server-brave-search | 웹 + 뉴스 검색 |
| GitHub | @modelcontextprotocol/server-github | 저장소, 이슈, PR |
| Filesystem | @modelcontextprotocol/server-filesystem | 로컬 파일 읽기/쓰기 |
| PostgreSQL | @modelcontextprotocol/server-postgres | SQL 쿼리 |
| Slack | @modelcontextprotocol/server-slack | 메시지, 채널 |
| Memory | @modelcontextprotocol/server-memory | 영구 키-값 저장소 |
팁: 커뮤니티 MCP 서버의 전체 목록은 github.com/modelcontextprotocol/servers에서 확인하세요.
도구 출력
도구 실행 결과는 output_key 아래의 상태에서 확인할 수 있습니다. 형식은 도구에 따라 다르므로 jamjet tools list로 스키마를 확인하세요.
다단계 워크플로에서는 중간 도구 결과가 상태에 누적됩니다:
nodes:
search:
type: tool
server: brave-search
tool: web_search
arguments:
query: "{{ state.query }}"
output_key: search_results # → state.search_results = [...]
next: docs
docs:
type: tool
server: brave-search
tool: web_search
arguments:
query: "{{ state.query }} documentation"
output_key: doc_results # → state.doc_results = [...]
next: synthesize오류 처리
도구 호출은 네트워크 오류, 잘못된 인수, 요청 제한 등 여러 이유로 실패할 수 있습니다. 노드별로 재시도 동작을 구성하세요:
search:
type: tool
server: brave-search
tool: web_search
arguments:
query: "{{ state.query }}"
output_key: search_results
retry:
max_attempts: 3
backoff: exponential
delay_ms: 1000
next: summarize모든 재시도가 실패하면 실행이 failed로 표시되며, 수동으로 재개하거나 재시도할 수 있습니다.