p

periphery-mcp-server

@zyntx-lab/periphery-mcp-server
0 Stars 1 次浏览 zyntx-lab 更新于 2026-08-23

Swift code analysis with Periphery - detect unused code and improve code quality

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "https://github.com/zyntx-lab/periphery-mcp-server/releases/download/v1.0.0/periphery-mcp-server": {
      "args": [],
      "command": ""
    }
  }
}

可用工具 (5 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

tavily_search 14 个参数 需填 1 项

Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.

必填参数:query

tavily_extract 6 个参数 需填 1 项

Extract content from URLs. Returns raw page content in markdown or text format.

必填参数:urls

tavily_crawl 11 个参数 需填 1 项

Crawl a website starting from a URL. Extracts content from pages with configurable depth and breadth.

必填参数:url

tavily_map 8 个参数 需填 1 项

Map a website's structure. Returns a list of URLs found starting from the base URL.

必填参数:url

tavily_research 2 个参数 需填 1 项

Perform comprehensive research on a given topic or question. Use this tool when you need to gather information from multiple sources to answer a question or complete a task. Returns a detailed response based on the research findings.

必填参数:input

服务介绍

Periphery MCP Server

A Model Context Protocol (MCP) server that wraps the Periphery tool, enabling AI assistants to perform Swift code audits and detect unused code in iOS/macOS projects.

# Features

  • 7 MCP Tools for comprehensive code analysis
  • CLI Integration - Uses Periphery CLI for stability and version flexibility
  • JSON Output - Structured, parseable results perfect for AI interpretation
  • Flexible Scanning - Support for Xcode projects and Swift Packages
  • Advanced Options - Full control over Periphery scan configurations

# Quick Start

Using Homebrew (Recommended):

#  1. Install Periphery
brew install peripheryapp/periphery/periphery

#  2. Install Periphery MCP Server
brew tap zyntx-lab/tap
brew install periphery-mcp-server

#  3. Configure Claude Desktop
#  Edit: ~/Library/Application Support/Claude/claude_desktop_config.json
#  Add:
#    "periphery": {
#      "command": "/opt/homebrew/bin/periphery-mcp-server"
#    }

#  4. Restart Claude Desktop (Cmd+Q then reopen)

#  5. Test it
#  In Claude Desktop: "Check if Periphery is installed"

From Source:

#  1. Install Periphery
brew install peripheryapp/periphery/periphery

#  2. Clone and build this server
git clone https://github.com/zyntx-lab/periphery-mcp-server.git
cd periphery-mcp-server
swift build -c release

#  3. Install to system path
sudo cp .build/release/periphery-mcp-server /usr/local/bin/
sudo chmod +x /usr/local/bin/periphery-mcp-server

#  4. Configure Claude Desktop
#  Edit: ~/Library/Application Support/Claude/claude_desktop_config.json
#  Add:
#    "periphery": {
#      "command": "/usr/local/bin/periphery-mcp-server"
#    }

#  5. Restart Claude Desktop (Cmd+Q then reopen)

#  6. Test it
#  In Claude Desktop: "Check if Periphery is installed"

# Prerequisites

  • macOS 13.0 or later
  • Swift 6.0 or later
  • Periphery installed

# # Installing Periphery

brew install peripheryapp/periphery/periphery

Or download from Periphery releases.

# Installation

# # Option 1: Homebrew (Recommended)

#  Add the tap
brew tap zyntx-lab/tap

#  Install the server
brew install periphery-mcp-server

#  Verify installation
which periphery-mcp-server
#  Should output: /opt/homebrew/bin/periphery-mcp-server

# # Option 2: Download from GitHub Releases

Download the latest binary from Releases:

#  Download and install
curl -L https://github.com/zyntx-lab/periphery-mcp-server/releases/download/v1.0.0/periphery-mcp-server \
  -o /usr/local/bin/periphery-mcp-server
chmod +x /usr/local/bin/periphery-mcp-server

#  Verify installation
which periphery-mcp-server
#  Should output: /usr/local/bin/periphery-mcp-server

# # Option 3: Build from Source

#  Clone the repository
git clone https://github.com/zyntx-lab/periphery-mcp-server.git
cd periphery-mcp-server

#  Build release version
swift build -c release

#  Install to system path (requires password)
sudo cp .build/release/periphery-mcp-server /usr/local/bin/
sudo chmod +x /usr/local/bin/periphery-mcp-server

#  Verify installation
which periphery-mcp-server
#  Should output: /usr/local/bin/periphery-mcp-server

# # Option 4: Install from MCP Registry

The server is also available on the MCP Registry. Use your MCP-compatible client to install it directly.

# Configuration

# # Claude Desktop

# # # Step 1: Locate Your Config File

The config file is at: ~/Library/Application Support/Claude/claude_desktop_config.json

# # # Step 2: Edit the Configuration

If you installed via Homebrew:

{
  "mcpServers": {
    "periphery": {
      "command": "/opt/homebrew/bin/periphery-mcp-server"
    }
  }
}

If you installed to /usr/local/bin:

{
  "mcpServers": {
    "periphery": {
      "command": "/usr/local/bin/periphery-mcp-server"
    }
  }
}

If you're using the build directory directly:

{
  "mcpServers": {
    "periphery": {
      "command": "/FULL/PATH/TO/periphery-mcp-server/.build/release/periphery-mcp-server"
    }
  }
}

If you already have other MCP servers configured:

{
  "mcpServers": {
    "xcode": {
      "command": "node",
      "args": ["/path/to/xcode-mcp-server/dist/index.js"]
    },
    "periphery": {
      "command": "/usr/local/bin/periphery-mcp-server"
    }
  }
}

# # # Step 3: Restart Claude Desktop

Important: You must completely quit and restart Claude Desktop for changes to take effect.

  1. Quit Claude Desktop: Press Cmd+Q or use Claude Desktop → Quit
  2. Wait a few seconds
  3. Reopen Claude Desktop

# # # Step 4: Verify It's Working

Open a new conversation in Claude Desktop and try:

"Check if Periphery is installed"

If configured correctly, Claude will use the check_periphery_installed tool and respond with installation status.

# # Testing with MCP Inspector

Before configuring Claude Desktop, you can test the server with the MCP Inspector:

#  Install MCP Inspector (if not already installed)
npm install -g @modelcontextprotocol/inspector

#  Test your server
npx @modelcontextprotocol/inspector /usr/local/bin/periphery-mcp-server

#  Or if using build directory
npx @modelcontextprotocol/inspector /path/to/periphery-mcp-server/.build/release/periphery-mcp-server

The Inspector will open in your browser where you can test all tools interactively.

# # Other Editors

# # # VS Code

Add to .vscode/mcp.json:

{
  "mcpServers": {
    "periphery": {
      "type": "stdio",
      "command": "/usr/local/bin/periphery-mcp-server"
    }
  }
}

# # # Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "periphery": {
      "type": "stdio",
      "command": "/usr/local/bin/periphery-mcp-server"
    }
  }
}

# Available Tools

# # 1. check_periphery_installed

Verify that Periphery CLI is installed and accessible.

Parameters: None

Example Response:

{
  "installed": true,
  "path": "/usr/local/bin/periphery",
  "message": "Periphery is installed and ready"
}

# # 2. get_periphery_version

Get the installed version of Periphery.

Parameters: None

Example Response:

{
  "version": "2.18.0",
  "raw_output": "2.18.0"
}

# # 3. scan_project

Run a basic Periphery scan on a project.

Parameters:

  • project_path (required): Path to .xcodeproj or Package.swift
  • schemes (optional): Build schemes to scan (Xcode only)
  • targets (optional): Specific targets to analyze
  • format (optional): Output format: json, xcode, csv, checkstyle (default: json)

Example Response:

{
  "success": true,
  "results": [
    {
      "kind": "class",
      "name": "UnusedClass",
      "modifiers": ["public"],
      "location": "Sources/MyApp/UnusedClass.swift:10:7"
    }
  ],
  "summary": {
    "total_unused": 5,
    "by_kind": {"class": 2, "function": 3}
  }
}

# # 4. scan_with_config

Run Periphery scan using a YAML configuration file.

Parameters:

  • config_path (required): Path to .periphery.yml config file

# # 5. analyze_unused_imports

Focus specifically on detecting unused imports.

Parameters:

  • project_path (required): Path to .xcodeproj or Package.swift
  • schemes (optional): Build schemes to scan
  • targets (optional): Specific targets to analyze

# # 6. find_redundant_public

Identify public declarations that could be internal.

Parameters:

  • project_path (required): Path to .xcodeproj or Package.swift
  • schemes (optional): Build schemes to scan
  • targets (optional): Specific targets to analyze

# # 7. scan_with_options

Advanced scanning with custom Periphery flags.

Parameters:

  • project_path (required): Path to .xcodeproj or Package.swift
  • schemes (optional): Build schemes to scan
  • targets (optional): Specific targets to analyze
  • format (optional): Output format
  • retain_public (optional): Retain all public declarations
  • retain_objc_accessible (optional): Retain @objc declarations
  • disable_unused_import_analysis (optional): Disable unused import analysis
  • index_store_path (optional): Custom index store location
  • verbose (optional): Enable verbose output

# Usage Examples

# # With Claude Desktop

Once configured, you can have natural conversations with Claude about your code:

Check Installation:

You: "Check if Periphery is installed"

Claude: [Uses check_periphery_installed]
"Yes, Periphery is installed at /usr/local/bin/periphery
Version: 2.18.0"

Scan a Project:

You: "Scan my iOS project at ~/Projects/MyApp/MyApp.xcodeproj for unused code"

Claude: [Uses scan_project]
"I found 15 unused declarations in your project:

Classes (5):
- UnusedViewController at MyApp/UnusedViewController.swift:10
- OldDataManager at MyApp/Models/OldDataManager.swift:25
...

Functions (8):
- helperFunction at Utils/Helpers.swift:42
...

Imports (2):
- UIKit in DataModel.swift:1
..."

Find Redundant Public:

You: "Check which public declarations could be made internal in ~/Projects/MyFramework"

Claude: [Uses find_redundant_public]
"Found 12 public declarations that are only used internally and could be made internal:
- public class InternalHelper (only used within the framework)
- public func formatDate() (only called from within the module)
..."

Analyze Unused Imports:

You: "Find unused imports in my Swift package"

Claude: [Uses analyze_unused_imports]
"Found 8 unused imports that can be safely removed:
- Foundation in Models/User.swift (not using any Foundation APIs)
- Combine in ViewModels/ProfileViewModel.swift (Combine is imported but not used)
..."

# # With Custom Configuration

Create .periphery.yml in your project:

project: MyApp.xcodeproj
schemes:
  - MyApp
targets:
  - MyApp
  - MyAppKit
format: json
retain_public: false
retain_objc_accessible: true
verbose: false

Then use scan_with_config:

You: "Scan my project using the custom config"

# Troubleshooting

# # Server Not Appearing in Claude Desktop

Symptoms: Claude doesn't recognize Periphery tools after configuration

Solutions:

  1. Verify config file syntax:

    #  Check for JSON syntax errors
    cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | python3 -m json.tool
    
  2. Check the binary path is correct:

    #  Test that the binary exists and runs
    /usr/local/bin/periphery-mcp-server
    #  Or your custom path
    /path/to/.build/release/periphery-mcp-server
    
  3. Completely restart Claude Desktop:

    • Press Cmd+Q to quit (not just close the window)
    • Wait 5 seconds
    • Reopen Claude Desktop
    • Start a new conversation (old conversations won't see new servers)
  4. Check Claude Desktop logs:

    #  View logs for errors
    tail -f ~/Library/Logs/Claude/mcp*.log
    

# # Periphery Not Found

If you get "Periphery is not installed":

  1. Install Periphery: brew install peripheryapp/periphery/periphery
  2. Verify installation: which periphery
  3. Restart Claude Desktop/VS Code/Cursor
  4. Try the check_periphery_installed tool again

# # MCP Inspector Connection Errors

If the Inspector can't connect to the server:

  1. Verify the server runs:

    #  Server should wait for input, not exit immediately
    /usr/local/bin/periphery-mcp-server
    #  Press Ctrl+C to exit
    
  2. Check for errors:

    #  Run with verbose output
    /usr/local/bin/periphery-mcp-server 2>&1 | tee server.log
    
  3. Use the absolute path:

    npx @modelcontextprotocol/inspector $(which periphery-mcp-server)
    

# # Scan Timeout

Default timeout is 5 minutes. For large projects:

  1. Use scan_with_config with a focused configuration
  2. Scan specific targets instead of the entire project
  3. Use - -index-store-path to reuse build artifacts
  4. Build your project in Xcode first to generate the index

# # No Results or Empty Scan

Periphery requires a compiled project with an index store:

  1. Build your project first in Xcode (Cmd+B)
  2. Ensure schemes are shared:
    • Xcode → Product → Scheme → Manage Schemes
    • Check the "Shared" checkbox for your scheme
  3. Verify the project path:
    #  For Xcode projects
    ls /path/to/YourProject.xcodeproj
    
    #  For Swift Packages
    ls /path/to/Package.swift
    
  4. Check Periphery can access the project:
    #  Test Periphery directly
    periphery scan - -project /path/to/YourProject.xcodeproj - -schemes YourScheme
    

# # Permission Denied

If you get "Permission denied" when running the server:

#  Make the binary executable
chmod +x /usr/local/bin/periphery-mcp-server

#  Or for build directory
chmod +x .build/release/periphery-mcp-server

# Architecture

This server uses the CLI approach rather than importing Periphery as a library for maximum stability:

  • ✅ CLI interface is Periphery's public API contract
  • ✅ Survives internal Periphery refactorings
  • ✅ Users can update Periphery independently
  • ✅ Simpler dependency management

# Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Submit a pull request

# License

MIT License - see LICENSE file for details.

# Related Projects

# Distribution Channels

This server is available through multiple channels:

# Support

相关 MCP 服务