
SafeLine
HTTP-SSEOfficialMCP server for managing and controlling SafeLine WAF instances
MCP server for managing and controlling SafeLine WAF instances
SafeLine MCP Server is an implementation of the Model Context Protocol (MCP) that provides complete management and control capabilities for SafeLine WAF.
Environment Variable | Description | Default Value | Required |
---|---|---|---|
LISTEN_PORT | Service listening port | 5678 | No |
LISTEN_ADDRESS | Service listening address | 0.0.0.0 | No |
SAFELINE_SECRET | SSE server secret | - | No |
SAFELINE_ADDRESS | SafeLine API address | - | Yes |
SAFELINE_API_TOKEN | SafeLine API authentication token | - | Yes |
docker run -d \ --name safeline-mcp \ -p 5678:5678 \ -e SAFELINE_API_TOKEN="your_api_token" \ -e SAFELINE_ADDRESS="https://your.safeline.com" \ -e LISTEN_PORT=5678 \ -e LISTEN_ADDRESS="0.0.0.0" \ chaitin/safeline-mcp:latest
# 1. Clone repository git clone https://github.com/chaitin/safeline-mcp.git cd safeline-mcp # 2. Edit docker-compose.yml to configure environment variables # Example docker-compose.yml: # version: '3' # services: # mcp: # image: chaitin/safeline-mcp:latest # container_name: safeline-mcp # ports: # - "5678:5678" # environment: # - SAFELINE_API_TOKEN=your_api_token # - SAFELINE_ADDRESS=https://your.safeline.com # - LISTEN_PORT=5678 # - LISTEN_ADDRESS=0.0.0.0 # 3. Start service docker compose -f docker-compose.yml up -d
# 1. Clone repository git clone https://github.com/chaitin/SafeLine.git cd safeline-mcp # 2. Install dependencies go mod download # 3. Configure config.yaml cp config.yaml.example config.yaml # Edit config.yaml with necessary configurations # 4. Run service go run main.go
For more API details, please refer to the API Documentation.
The Go API in this project is currently under development, and APIs may change. If you have specific requirements, please submit an Issue for discussion.
internal/
├── api/ # API implementation
│ ├── app/ # Application-related APIs
│ │ └── create_application.go
│ └── rule/ # Rule-related APIs
│ └── create_rule.go
└── tools/ # MCP tool implementation
├── app/ # Application-related tools
│ └── create_application.go
└── rule/ # Rule-related tools
└── create_rule.go
Create Tool File
internal/tools
internal/tools/app/create_application.go
Tool Implementation Template
package app type ToolName struct{} type ToolParams struct { // Parameter definitions Param1 string `json:"param1" desc:"parameter description" required:"true"` Param2 int `json:"param2" desc:"parameter description" required:"false"` } type ToolResult struct { Field1 string `json:"field1"` } func (t *ToolName) Name() string { return "tool_name" } func (t *ToolName) Description() string { return "tool description" } func (t *ToolName) Validate(params ToolParams) error { // Parameter validation logic return nil } func (t *ToolName) Execute(ctx context.Context, params ToolParams) (result ToolResult, err error) { // Tool execution logic return result, nil }
If you need to use some APIs that have not been implemented yet, you need to create corresponding files in the api directory for implementation
internal/api
internal/api/app/create_application.go
API Implementation Template
package app type RequestType struct { // Request parameter definitions Param1 string `json:"param1"` Param2 int `json:"param2"` } func APIName(ctx context.Context, req *RequestType) (ResultType, error) { if req == nil { return nil, errors.New("request is required") } var resp api.Response[ResultType] err := api.Service().Post(ctx, "/api/path", req, &resp) if err != nil { return nil, errors.Wrap(err, "failed to execute") } if resp.Err != nil { return nil, errors.New(resp.Msg) } return resp.Data, nil }
The tool registration file internal/tools/init.go
is used to centrally manage all tool registrations
init()
functionAppendTool()
method for registration// Register create application tool AppendTool(&app.CreateApp{}) // Register create blacklist rule tool AppendTool(&rule.CreateBlacklistRule{})
Naming Conventions
Directory Organization
Code Standards
Documentation Requirements
Refer to the implementation of the create_application
tool:
internal/tools/app/create_application.go
internal/api/app/create_application.go