Common Lisp로 MCP 서버 구축
Source: Dev.to
사전 요구 사항
시작하기 전에 다음이 설치되어 있는지 확인하세요:
- SBCL – 고성능 Common Lisp 컴파일러
- Roswell – Common Lisp 구현 관리자 및 스크립트 실행기
- Quicklisp – Common Lisp의 사실상 패키지 매니저
- Ultralisp – 커뮤니티 기반 Common Lisp 라이브러리 배포판
Ultralisp 설치
SBCL과 Quicklisp을 사용할 때 Ultralisp를 활성화하려면 다음을 실행합니다:
(ql-dist:install-dist "http://dist.ultralisp.org/" :prompt nil)(SBCL 및 Quicklisp 설치 방법은 부록에 설명되어 있습니다.)
문제점: 40ants-mcp 로드
다음과 같이 40ants-mcp를 로드하려고 하면:
(ql:quickload :40ants-mcp)오류가 발생할 수 있습니다. 해결 방법은 간단하지만 직관적이지 않으며, 먼저 jsonrpc를 로드하면 됩니다:
(ql:quickload :jsonrpc)
(ql:quickload :40ants-mcp)이 의존성은 자동으로 해결되지 않으며, 이것이 좌절의 원인이었습니다.
MCP 서버 만들기
mcp-exper 패키지의 최소 예제는 다음과 같습니다:
(in-package :mcp-exper)
(openrpc-server:define-api (mi-tools :title "mi-tools"))
(40ants-mcp/tools:define-tool (mi-tools add) (a b)
(:summary "just add")
(:param a integer "a")
(:param b integer "b")
(:result text-content)
(make-instance 'text-content :text (format nil "~a" (+ a b))))
(defun start-server ()
(40ants-mcp/server/definition:start-server mi-tools))핵심 포인트
openrpc-server:define-api를 사용해 API를 정의합니다.40ants-mcp/tools:define-tool을 사용해 도구를 정의합니다.- 텍스트 결과는
text-content인스턴스로 반환합니다 (MCP는 특정 콘텐츠 타입을 요구합니다).
서버 실행
Roswell 스크립트(mi-mcp-server.ros)를 만듭니다:
#!/bin/sh
#|-*- mode:lisp -*-|#
exec ros -Q -- $0 "$@"
|#
(progn
(ros:ensure-asdf)
#+quicklisp (ql:quickload '(:mcp-exper) :silent t))
(defun main (&rest argv)
(declare (ignorable argv))
(mcp-exper:start-server))간단 테스트
Roswell로 스크립트를 직접 실행합니다:
ros mi-mcp-server.ros프로덕션 설치
실행 파일을 빌드하고 설치합니다:
ros build mi-mcp-server.ros
install -m 0755 mi-mcp-server $HOME/.local/bin/$HOME/.local/bin이 PATH에 포함되어 있는지 확인하세요.
Opencode와 통합
Opencode에서 MCP 서버를 사용하려면 ~/.config/opencode/opencode.json에 다음을 추가합니다:
{
"mcp": {
"mi-tools": {
"type": "local",
"command": ["mi-mcp-server"],
"enabled": true
}
}
}결론
Common Lisp으로 MCP 서버를 만드는 것은 요령만 알면 간단합니다. 40ants-mcp 라이브러리는 설계가 훌륭하고, OpenRPC 통합도 원활하게 동작합니다.
이 가이드가 제가 겪었던 좌절을 줄이는 데 도움이 되길 바랍니다. 즐거운 해킹 되세요!
이 예제의 전체 소스 코드는 mcp-exper에서 확인할 수 있습니다.
부록: SBCL 설치
macOS
brew install sbclDebian/Ubuntu
apt install sbclArch Linux
pacman -S sbcl부록: Quicklisp 설치
Quicklisp을 다운로드하고 설치합니다:
wget https://beta.quicklisp.org/quicklisp.lisp
sbcl --load quicklisp.lisp \
--eval '(quicklisp-quickstart:install)' \
--eval '(ql-util:without-prompting (ql:add-to-init-file))' \
--quit