FortiGate MCP Server
개요
이것은 AI 어시스턴트가 FortiGate 방화벽을 관리할 수 있게 해주는 MCP(Model Context Protocol) 서버입니다 — 단일 랩 장비부터 수십 개의 고객, 사이트, 클러스터로 구성된 멀티 테넌트 환경까지.
대부분의 FortiGate 자동화 도구가 동시에 갖추지 못한 세 가지 핵심 아이디어를 기반으로 설계되었습니다:
미리 보기 없이는 어떤 변경도 수행되지 않습니다. 모든 생성/수정/삭제 호출은 즉시 실행되는 대신 diff와
change_id를 반환합니다. 별도의change_apply호출이 실제로 변경을 실행하며, 실행 전에 라이브 상태의 드리프트(drift)를 다시 확인합니다. 신뢰할 수 있는 자동화라 할지라도 "그냥 실행" 모드는 존재하지 않습니다.Claude는 실제 자격 증명을 볼 수 없습니다. 장비 비밀번호/API 토큰은 로컬의 비-MCP CLI(
fortinet-mcp-cred)를 통해 OS 자격 증명 저장소(Windows Credential Manager / macOS Keychain / Linux Secret Service)에 직접 프로비저닝됩니다. MCP 도구 표면은 항상 불투명한credential_id만 처리합니다.정책 CRUD뿐만 아니라 전체 수명 주기를 다룹니다. 장비 부트스트랩(DNS/NTP/syslog/SNMP/admin/HA), VDOM 멀티 테넌시, 인터페이스/존/DHCP, 라우팅, 방화벽 정책, VPN(IPsec + SSL), 보안/규정 준수 분석, 문서 생성까지 모두 일급 도구 네임스페이스로 제공됩니다 — 전체 도구 참조(115개 도구)를 참조하세요.
Related MCP server: FortiGate MCP Server
기능
도메인 | 제공 내용 |
인벤토리 및 멀티 테넌시 | 로컬 SQLite 저장소의 Customer -> Site -> Device -> VDOM 계층 구조. 이름, 사이트, 고객 또는 IP로 장비를 조회합니다 — 프롬프트에 IP를 직접 입력할 필요가 없습니다. |
장비 부트스트랩 | DNS, NTP, syslog, SNMP(sysinfo + v1/v2c 커뮤니티), 전역 설정(호스트명/시간대/admin 포트), 로컬 관리 계정, HA — 공장 기본값에서 프로덕션 환경까지 필요한 모든 것. |
VDOM 수명 주기 | VDOM 생성/삭제, VDOM 간 링크 생성/삭제. |
네트워크 토폴로지 | 인터페이스(VLAN 서브 인터페이스, loopback, vdom-link 멤버), 존, DHCP 서버, 정적 라우트. |
방화벽 및 NAT | 정책, 주소/서비스 객체, 가상 IP — 전체 CRUD. |
VPN | 라이브 상태 확인이 가능한 IPsec 사이트 간 터널(phase1/phase2); SSL VPN 가시성. |
변경 안전성 | READ_ONLY / SAFE / FULL 운영 모드, 모든 변경에 대한 preview -> rollback 파이프라인, 적용 시 드리프트 감지. |
분석 및 규정 준수 | 중복/섀도잉/any-any 정책 탐지, 미사용 객체 탐지, 서브넷 중복, 모범 사례 검사(정책 및 시스템 구성), 휴리스틱 0-100 보안 점수, 통합 규정 준수 보고서. |
문서 생성 | 토폴로지 다이어그램(Mermaid/drawio/PlantUML), 정책/라우팅/VPN/시스템 구성 Markdown 문서, 통합 내보내기. |
플릿 운영 | 장비 간 비교, 전체 환경에서 객체 검색, 객체 동기화, 구성 복제, 플릿 전체 보고서. |
자연어 인텐트 | 복합 도구( |
전체 115개 도구의 목록은 docs/TOOLS.md를 참조하세요.
빠른 시작
git clone https://github.com/Serrinho02/fortigate-mcp-server.git
cd fortigate-mcp-server
uv syncconfig/config.json을 생성합니다(레거시 단일 파일 장비 목록은 아래 설치의 인벤토리 시스템을 사용하는 경우 선택 사항입니다):
{ "fortigate": { "devices": {} } }MCP 클라이언트(예: Claude Desktop)를 서버에 연결합니다:
{
"mcpServers": {
"fortigate": {
"command": "/absolute/path/to/fortigate-mcp-server/.venv/bin/python",
"args": ["-m", "src.fortigate_mcp.server"],
"env": {
"FORTIGATE_MCP_CONFIG": "/absolute/path/to/fortigate-mcp-server/config/config.json",
"FORTINET_MCP_MODE": "full"
}
}
}
}그런 다음 Claude에서: 장비를 등록하고(inventory_register_device_pending), fortinet-mcp-cred set <credential_id>로 자격 증명을 로컬에 프로비저닝한 후, get_device_status를 호출합니다. 전체 설치 안내, Windows 경로, Docker 지침: docs/INSTALLATION.md. 개념 가이드 및 실제 예제: docs/USAGE.md.
아키텍처
7개 계층, 의존성은 한 방향으로만 흐릅니다:
flowchart TB
Transport["MCP Tool Layer -- inventory.*, connection.*, policy/network/routing/vip.*, vpn.*, system.*, vdom.*, analysis.*, doc.*, fleet.*, intent.*, change.*"]
Services["Service Layer -- one Service per capability, mode enforcement, error translation"]
Domain["Domain / Analysis Engines -- pure functions: DiffEngine, policy analyzers, scoring"]
Repo["Repository Layer -- inventory/change/snapshot persistence"]
Adapters["Vendor Adapter Layer -- FortinetProductAdapter Protocol (the plugin boundary)"]
Clients["Vendor API Client -- FortiOSRestClient (httpx, persistent per-device connection)"]
Infra["Infra -- ConnectionManager, CredentialManager (keyring), SQLite/SQLAlchemy"]
Transport --> Services
Services --> Domain
Services --> Repo
Domain --> Repo
Repo --> Adapters
Adapters --> Clients
Services -.uses.-> InfraFortinetProductAdapter는 유일한 확장 경계입니다: 현재 FortiOSAdapter가 유일한 구현체이지만, 다른 Fortinet 제품을 추가하려면 동일한 Protocol에 대해 새 어댑터 하나만 작성하면 됩니다 — 그 위의 어떤 계층도 변경할 필요가 없습니다.
운영 모드
FORTINET_MCP_MODE로 설정합니다(기본값 full):
모드 | 동작 |
| 어떤 변경도 미리 보기조차 허용되지 않습니다. |
| 삭제 작업이 거부됩니다; 생성/수정은 여전히 preview -> apply를 거쳐야 합니다. |
| 모든 작업이 허용되지만, 여전히 preview -> apply를 거쳐야 합니다 — 어떤 모드에서도 단발성 "즉시 실행" 경로는 없습니다. |
보안 모델
장비 자격 증명은 도구 인자로 사용되지 않으며 대화에 등장하지 않습니다.
inventory_register_device_pending은 메타데이터(호스트, 이름, 고객, 사이트)만 수집하고 불투명한credential_id를 발급합니다. 실제 비밀은fortinet-mcp-cred set <credential_id>를 통해 로컬에서 한 번만 입력되며, OS 자격 증명 저장소에 직접 저장됩니다.connection_connect/ 세션이 필요한 모든 도구는 해당 CLI 단계가 완료될 때까지 "credential not provisioned" 오류로 실패합니다 — MCP를 통해 비밀이 흐를 수 있는 우회 경로는 없습니다.두 가지 문서화된 예외가 있으며, 둘 다 도구 설명에 명시되어 있습니다: IPsec 터널의 PSK(
vpn_create_ipsec_tunnel)와 로컬 관리 계정의 비밀번호(system_create_admin)는 일반적인 도구 인자입니다. FortiOS 자체가 GET 시 이 값들을 절대 반환하지 않기 때문에, 값이 호출을 한 번 통과하지 않고서는 preview/diff를 수행할 방법이 없습니다.
알려진 제한 사항
선언적 "원하는 상태 적용" 도구가 없습니다. 의도적인 설계입니다 — 이 서버가 Terraform/Ansible 스타일의 apply 엔진을 소유하는 대신, Claude가 세분화된 도구들을 직접 조합합니다(
intent.*패턴 참조).Docker + 헤드리스 Linux: 자격 증명 관리자는 OS
keyring라이브러리를 래핑합니다. Secret Service 데몬이 없는 컨테이너/헤드리스 Linux 호스트에서는keyrings.cryptfile폴백이 필요합니다(기본적으로 연결되지 않음) — docs/INSTALLATION.md를 참조하세요. Windows/macOS/데스크톱 Linux의 네이티브 설치는 바로 작동합니다.SNMP: v1/v2c 커뮤니티만 지원됩니다. SNMPv3 사용자는 아직 없습니다.
FortiManager/FortiWeb/기타 Fortinet 제품 어댑터는 아직 없습니다 — 어댑터 Protocol은 지원하지만 FortiOS 외에는 구현된 것이 없습니다.
모의 FortiOS REST API에 대한 실제 HTTP 트래픽 캡처로 엔드투엔드 검증을 완료했습니다. 실제 장비에서 문제가 발생하면 FortiOS 버전과 엔드포인트를 포함해 이슈를 열어주세요.
테스트
uv run pytest548개의 테스트, 외부 의존성 불필요(전체 스위트에서 장비 상호작용은 HTTP 전송 계층에서 모의 처리됩니다).
기여
이슈와 PR을 환영합니다. 새 리소스 유형을 추가하는 경우 VPN 또는 시스템 구성 도메인이 추가된 방식을 참조하세요(services/vpn_service.py, services/system_service.py, services/change_dispatch.py) — 모든 새 변경 리소스는 동일한 adapter -> change_dispatch -> service -> MCP 도구 패턴을 따릅니다.
작성자
Nicola Serra가 구축하고 유지 관리합니다.
라이선스
MIT — LICENSE를 참조하세요.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables programmatic management of FortiGate firewall devices through MCP, supporting firewall policies, network objects, virtual IPs, routing, and interface management with Cursor IDE integration.MIT
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server for managing FortiGate firewalls, enabling AI assistants to manage firewall policies, network objects, routing, and device configurations.33MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to interact with FortiManager for centralized firewall policy management, device provisioning, and network configuration through the FortiManager JSON-RPC API.1004MIT
- AlicenseNot gradedqualityDmaintenanceEnables read-only querying and diagnostics of Fortigate firewalls via SSH, providing security analysis, traffic monitoring, and configuration inspection through natural language.MIT
Related MCP Connectors
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Threat modeling, code/cloud/pipeline scanning, shadow-AI discovery, compliance checks and fixes.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Serrinho02/fortigate-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server