
sysprog21/frama-c-mcp
Developer tools이 페이지는 AI로 자동 번역되었습니다. 기술적인 세부 사항은 원문을 확인하세요. 원문 보기
AI 대리인 Frama-C를 주는 MCP 서버: EVA, WP 및 sandboxed ACSL iteration
개요
AI 대리인 Frama-C를 주는 MCP 서버: EVA 요약 해석, WP deductive 증거, ACSL annotation 주입 및 annotations를 시도를 위한 고립된 사면. 서버는 사람이 아닌 에이전트에 의해 구동되도록 설계되었습니다. MCP 클라이언트는 그것을 spawns하고 stdio에 말하고, 그래서 유형에 인간을 위한 명령이 없습니다. 그것은 치명적인 반복의 주위에 건축됩니다: annotation를 전파하고, 그것을 증명하고, 목표가 닫지 않은 이유를 읽으십시오, 그 후에 개정. 세션 상태는 쉘 사용보다 오히려 그 루프에서 다음과 같습니다. 한 프로젝트가 호출을 가로지르기 때문에 샌드박스는 이름에 의해 지정되며, 영수증은 실행 중에만 비교합니다. Claude Code, Claude Desktop 또는 MCP 클라이언트로 연결한 다음 영어로 프롬프트합니다. 에이전트와 Prompt 패턴을 연결합니다. 확인 subcommand는 CI에 존재하고 손으로 실행하는 유일한 부분입니다.
개요(AI 번역)
AI 에이전트를 제공하는 MCP 서버 Frama-C: EVA 요약 해석, WP 공제 증명, ACSL 주석 주입, 및 annotations 시도를 위한 고립된 사면 자세히 보기
서버는 사람이 아닌 에이전트에 의해 구동되도록 설계되었습니다. MCP 소개 클라이언트는 그것을 spawns하고 stdio에 그것을 말하고, 그래서 인간을 위한 명령이 없습니다 유형에. 그것은 그것의 반복의 주위에 건축됩니다: annotation를 전파하고, 그것을 증명합니다, 왜 목표가 닫지 않았는지 읽으십시오. 세션 상태는 다음과 같습니다. 그 루프는 쉘 사용보다 오히려, 1 개의 프로젝트가 가로지르기 때문에 호출, sandboxes는 이름에 의해 지정되고, 증거 영수증은 단지 안에 비교합니다 한국어
Claude Code, Claude Desktop 또는 MCP 클라이언트로 연결한 후,
한국어. 자주 묻는 질문
Prompt 패턴. A check subcommand는 CI에 존재하며
손으로 실행하는 유일한 부분.
건축
서버에는 2개의 필수 성분이 있습니다:
- Rust MCP 서버: MCP stdio에 대한 도구를 노출, 요청을 번역 Frama-C의 서버 프로토콜, lazily 시작 주요 Frama-C 프로세스에 첫번째 프로젝트 가동.
ast-utilsFrama-C 플러그인: 빠른 액세스를 위한 사용자 지정 요청을 제공,
이 페이지는 AI로 자동 번역되었습니다. 기술적인 세부 사항은 원문을 확인하세요.
README
원문 README의 일부입니다. 원문 보기.
frama-c-mcp
An MCP server that gives an AI agent Frama-C: EVA abstract interpretation, WP deductive proof, ACSL annotation injection, and isolated sandboxes for trying annotations out.
The server is designed to be driven by an agent rather than by a person. An MCP client spawns it and speaks to it over stdio, so there is no command for a human to type. It is built around an iterative loop: propose an annotation, prove it, read why the goal did not close, then revise. The session state follows from that loop rather than from shell use, since one project stays loaded across calls, sandboxes are addressed by name, and proof receipts compare only within a run.
Wire it into Claude Code, Claude Desktop, or any MCP client, then prompt in
English. See Connect an agent and
Prompt patterns. A check subcommand exists for CI and is
the only part intended to be run by hand.
Architecture
┌──────────┐ MCP over stdio ┌────────────────┐ Unix socket ┌─────────────────┐
│ AI agent │◄─────────────────►│ frama-c-mcp │◄─────────────►│ Frama-C main │
└──────────┘ │ Rust server │ │ + ast-utils │
└───────┬────────┘ └─────────────────┘
│ Unix socket per sandbox
▼
┌──────────────────┐
│ Frama-C sandbox │
│ + ast-utils │
│ per experiment │
└──────────────────┘
The server has two required components:
- Rust MCP server: exposes the tools over MCP stdio, translates requests into Frama-C’s server protocol, and lazily starts the main Frama-C process on the first project operation.
ast-utilsFrama-C plugin: provides the custom requests for AST access, dependency extraction, ACSL injection, sandboxing, and WP configuration. Build and install it in the same opam switch as Frama-C.
create_sandbox extracts a function together with its type, callee, and global
dependencies into a temporary C file, then starts a separate Frama-C process.
An agent can iterate on annotations there without mutating the main project;
verified sandbox annotations are merged back explicitly.
Session model
The server holds one project: reload_project or the first check loads it,
and later calls operate on that AST. Sandboxes are separate processes,
addressed as experiment_id:function.
The preprocessor surface is nostdinc, include_paths, isystem_paths,
defines, force_includes, and machdep, applied in that order. Each value is
written without its compiler flag. nostdinc drops the preprocessor’s default
system directories and isystem_paths are searched after include_paths; pair
설치
This server does not publish a one-line install command.
Open the repository installation guide MCP 초보자라면? mcpskill.org 가이드부터 시작하세요 →설정
{
"mcpServers": {
"frama-c": {
"command": "/path/to/frama-c-mcp",
"args": ["--frama-c", "/path/to/frama-c"]
}
}
}