AI 어시스턴트와 리스펙스 사용하기

로컬 MCP 서버를 연결하고 리스펙스 규칙을 실행해 결과와 진단을 읽습니다.

로컬 서버 연결하기

다운로드에서 네이티브 실행 파일을 설치합니다. 터미널에서 버전을 확인합니다.

SH
lispex --version

출력에서 설치된 정확한 버전을 확인하고 내려받은 파일의 버전과 비교합니다.

명령의 종료 상태는 0입니다. 로컬 MCP 서버를 지원하는 어시스턴트를 사용하세요. MCP는 애플리케이션이 도구 목록을 받고 도구를 호출할 때 쓰는 통신 규약입니다.

애플리케이션의 MCP 설정에 다음 항목을 추가합니다. 애플리케이션은 lispex mcp serve를 시작합니다. 메시지는 표준 입력과 표준 출력으로 주고받으며, 이를 stdio라고 부릅니다.

JSON
{
  "mcpServers": {
    "lispex": {
      "command": "lispex",
      "args": ["mcp", "serve"]
    }
  }
}

애플리케이션이 lispex를 찾지 못하면 command를 설치한 실행 파일의 절대경로로 바꿉니다. Windows의 JSON 경로에는 D:/Tools/lispex.exe처럼 슬래시를 쓸 수 있습니다. 실제로 설치한 위치를 넣으세요.

애플리케이션에서 서버를 다시 연결하면 다음 도구 네 개를 사용할 수 있습니다.

도구할 수 있는 일
lispex_reference형식과 프로시저, 소스 문법, 자원 프로파일, 실행 방식 조회
lispex_eval검토한 소스를 실행하고 값과 출력과 진단 확인
lispex_diagnostic진단 코드와 발생 원인 조회
lispex_compare_routes지정한 런타임 구현들의 실행 결과 비교

승인 규칙 실행하기

어시스턴트에 연결된 도구를 사용하도록 요청합니다.

리스펙스의 if 형식을 확인해. 입력이 10 이상이면 approve, 그 밖에는 review를 반환하는 규칙을 작성해. 입력 12로 실행하고 도구 결과를 보여 줘.

다음 JSON은 터미널 명령이 아니라 도구에 전달할 인자입니다. 먼저 lispex_reference를 호출합니다.

JSON
{
  "topic": "forms",
  "name": "if"
}

응답의 structuredContent.result.known은 true입니다. 항목에는 (if test consequent alternate)라는 형식이 나옵니다. 두 갈래를 모두 써야 합니다. 거짓으로 취급하는 값은 #f뿐입니다.

이제 전체 프로그램과 입력을 넣어 lispex_eval을 호출합니다.

JSON
{
  "source": "(if (>= input 10) 'approve 'review)",
  "input": "12"
}

source 문자열에 전체 프로그램이 있으므로 소스 파일을 따로 준비할 필요는 없습니다. input 문자열에는 리스펙스 데이터 값 하나를 적습니다. 서버는 프로그램에서 그 값을 input이라는 이름으로 쓸 수 있게 합니다.

응답의 structuredContent에서 필요한 필드만 발췌하면 다음과 같습니다.

JSON
{
  "status": "ok",
  "values": ["approve"],
  "stdout": "approve\n",
  "diagnostics": [],
  "warnings": [],
  "exit_status": 0
}

규칙은 심볼 approve를 반환했습니다. values 배열에는 그 값을 출력용 문자열로 표현한 내용이 들어갑니다. 이 도구는 최상위 값도 stdout에 쓰며, \n은 줄바꿈을 뜻합니다. 평가는 상태 0으로 성공했고 서버는 다음 요청을 기다립니다. 이 호출은 결과 파일을 만들지 않습니다.

입력 인자를 "9"로 바꾸면 결과는 ["review"]가 됩니다. stdout은 "review\n"이고 성공 상태는 같습니다.

진단이 나오면 lispex_diagnostic으로 코드를 조회합니다. 예를 들어 {"code": "E302"}는 인자 개수가 잘못된 경우를 설명합니다. 소스를 고친 뒤 다시 실행하세요. MCP 참조에서 전체 요청과 응답 발췌를 볼 수 있습니다.

내장 런타임 구현 비교하기

다음 인자로 lispex_compare_routes를 호출합니다.

JSON
{
  "court": "tree-rust",
  "source": "(+ input 1)",
  "input": "41"
}

court 필드는 비교 대상을 고릅니다. tree-rust는 리스펙스 인터프리터와 리스펙스 VM을 실행합니다. 인터프리터는 소스 형식을 평가하고 가상 머신은 컴파일한 명령을 실행합니다.

응답의 structuredContent에는 다음 필드가 들어갑니다.

JSON
{
  "court": "tree-rust",
  "status": "completed",
  "required_routes": ["tree", "rust-vm"],
  "agreement": true,
  "partial_comparison": false,
  "answer_selected": false
}

observations의 두 항목 모두 semantic.values에 ["42"]를 담습니다. semantic.stdout은 "42\n"입니다. agreement는 결과와 자원 관측이 비교 규칙에 따라 일치하는지 나타냅니다.

도구 스키마의 다른 court 값은 MCP 참조에서 설명합니다.

데이터와 한도와 애플리케이션 권한

프로그램을 작성하며 직접 검토한 소스에 이 도구를 사용하세요. 요청당 소스는 65,536바이트, 입력은 16,384바이트까지 받습니다. 평가 시간은 5초, 결과 크기는 1MiB까지 허용합니다. 자원 프로파일에서 비교 한도와 실패 결과도 확인할 수 있습니다. 신뢰하지 않는 사용자가 제공한 애플리케이션 규칙에는 자원 제어 평가기를 사용합니다.

프로그램은 전달받은 데이터를 리스펙스 연산으로 계산합니다. 서버는 소스 해시와 결과와 출력과 진단을 반환합니다. 요청이 끝나면 요청 데이터를 해제합니다. 어시스턴트에 입력한 텍스트에는 해당 애플리케이션의 데이터 정책이 적용됩니다.

도구 접근과 외부 행동은 호출 애플리케이션이 관리합니다. 예를 들어 approve는 규칙이 내놓은 답입니다. 그 답에 따라 행동할지, 어떤 권한이 필요한지는 애플리케이션이 결정합니다. 서명된 결정 기록이 필요하면 리스펙스 바우치를 사용합니다. 바우치는 게시자를 인증하고 요청에 기록을 연결한 뒤 재실행합니다. 수신 애플리케이션은 자신의 수용 규칙을 적용합니다.

작업을 마치면 애플리케이션에서 MCP 서버 연결을 끊습니다. stdio 연결이 닫히면 로컬 프로세스가 종료되고 요청 상태가 해제됩니다.

MCP 도구 참조 · 학습 경로