
Swift Mcp Server Generator
Scaffold a production-style MCP server in Swift with tools, resources, prompts, tests, and Package.swift wiring.
Overview
Swift MCP Server Generator is an agent skill for the Build phase that scaffolds a complete Model Context Protocol server project in Swift using the official MCP Swift SDK package layout.
Install
npx skills add https://github.com/github/awesome-copilot --skill swift-mcp-server-generatorWhat is this skill?
- Full repo layout: Package.swift, Sources, Tools/Resources/Prompts handlers, Tests, README
- Package.swift pins official `modelcontextprotocol/swift-sdk` (from 0.10.0) plus swift-log
- Targets macOS 13+, iOS 16+, watchOS, tvOS, and visionOS in the template
- Separates definitions vs handlers for tools, resources, and prompts
- Swift 6 toolchain declaration in generated Package.swift
- Project template includes Tools, Resources, Prompts, and Tests directories
- Swift SDK dependency from version 0.10.0
- Package platforms: macOS v13, iOS v16, plus watchOS, tvOS, visionOS
Adoption & trust: 8.5k installs on skills.sh; 34.6k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want custom tools in your agent workflow but lack a standard Swift MCP repo with tools, resources, prompts, and tests wired correctly.
Who is it for?
Apple-ecosystem developers adding a typed MCP server alongside an app, CLI, or internal automation tool.
Skip if: Node or Python MCP servers, hosted-only MCP proxies with no Swift code, or teams that only need a single throwaway script.
When should I use this skill?
When asked to create a Swift MCP server using the official MCP Swift SDK package.
What do I get? / Deliverables
You get a generated Swift package tree with SDK dependencies and handler stubs ready to implement business logic and register MCP capabilities.
- Complete Swift package directory tree
- Package.swift with MCP and logging dependencies
- Handler stubs and README for the MCP server
Recommended Skills
Journey fit
Build/agent-tooling is the canonical shelf because the skill emits a new MCP server project structure for agents to call. Agent-tooling matches Model Context Protocol servers that extend coding agents with custom tools and resources.
How it compares
Skill package generator for Swift MCP repos—not a hosted MCP marketplace or runtime monitor.
Common Questions / FAQ
Who is swift-mcp-server-generator for?
Solo builders and indie devs on Apple platforms who want a standard MCP server codebase wired to the official Swift SDK.
When should I use swift-mcp-server-generator?
During build/agent-tooling when you are adding MCP tools for a macOS or iOS-adjacent product and need Package.swift, handlers, and tests in one pass.
Is swift-mcp-server-generator safe to install?
Generated projects will fetch Swift packages from GitHub; review the Security Audits panel on this page and vet dependencies before `swift build`.
SKILL.md
READMESKILL.md - Swift Mcp Server Generator
# Swift MCP Server Generator Generate a complete, production-ready MCP server in Swift using the official Swift SDK package. ## Project Generation When asked to create a Swift MCP server, generate a complete project with this structure: ``` my-mcp-server/ ├── Package.swift ├── Sources/ │ └── MyMCPServer/ │ ├── main.swift │ ├── Server.swift │ ├── Tools/ │ │ ├── ToolDefinitions.swift │ │ └── ToolHandlers.swift │ ├── Resources/ │ │ ├── ResourceDefinitions.swift │ │ └── ResourceHandlers.swift │ └── Prompts/ │ ├── PromptDefinitions.swift │ └── PromptHandlers.swift ├── Tests/ │ └── MyMCPServerTests/ │ └── ServerTests.swift └── README.md ``` ## Package.swift Template ```swift // swift-tools-version: 6.0 import PackageDescription let package = Package( name: "MyMCPServer", platforms: [ .macOS(.v13), .iOS(.v16), .watchOS(.v9), .tvOS(.v16), .visionOS(.v1) ], dependencies: [ .package( url: "https://github.com/modelcontextprotocol/swift-sdk.git", from: "0.10.0" ), .package( url: "https://github.com/apple/swift-log.git", from: "1.5.0" ), .package( url: "https://github.com/swift-server/swift-service-lifecycle.git", from: "2.0.0" ) ], targets: [ .executableTarget( name: "MyMCPServer", dependencies: [ .product(name: "MCP", package: "swift-sdk"), .product(name: "Logging", package: "swift-log"), .product(name: "ServiceLifecycle", package: "swift-service-lifecycle") ] ), .testTarget( name: "MyMCPServerTests", dependencies: ["MyMCPServer"] ) ] ) ``` ## main.swift Template ```swift import MCP import Logging import ServiceLifecycle struct MCPService: Service { let server: Server let transport: Transport func run() async throws { try await server.start(transport: transport) { clientInfo, capabilities in logger.info("Client connected", metadata: [ "name": .string(clientInfo.name), "version": .string(clientInfo.version) ]) } // Keep service running try await Task.sleep(for: .days(365 * 100)) } func shutdown() async throws { logger.info("Shutting down MCP server") await server.stop() } } var logger = Logger(label: "com.example.mcp-server") logger.logLevel = .info do { let server = await createServer() let transport = StdioTransport(logger: logger) let service = MCPService(server: server, transport: transport) let serviceGroup = ServiceGroup( services: [service], configuration: .init( gracefulShutdownSignals: [.sigterm, .sigint] ), logger: logger ) try await serviceGroup.run() } catch { logger.error("Fatal error", metadata: ["error": .string("\(error)")]) throw error } ``` ## Server.swift Template ```swift import MCP import Logging func createServer() async -> Server { let server = Server( name: "MyMCPServer", version: "1.0.0", capabilities: .init( prompts: .init(listChanged: true), resources: .init(subscribe: true, listChanged: true), tools: .init(listChanged: true) ) ) // Register tool handlers await registerToolHandlers(server: server) // Register resource handlers await registerResourceHandlers(server: server) // Register prompt handlers await registerPromptHandlers(server: server) return server } ``` ## Tool