[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AE8YBYP4D6598MSH7934FA":3,"skill-same:01M6AE8YBYP4D6598MSH7934FA":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6AE8YBYP4D6598MSH7934FA","swift-mcp-server-generator",null,"Generate a complete Model Context Protocol server project in Swift using the official MCP Swift SDK package.","github\u002Fawesome-copilot","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3PBDYPK7NVFJNJ66Y8RS",41046,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fswift-mcp-server-generator\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"MCP","swift","mcp server","server","swift mcp server generator","generator","sdk","model context protocol","official","generate","protocol","package","model","context","project","complete","2026-11-10 10:12:30",false,"---\nname: swift-mcp-server-generator\ndescription: 'Generate a complete Model Context Protocol server project in Swift using the official MCP Swift SDK package.'\n---\n\n# Swift MCP Server Generator\n\nGenerate a complete, production-ready MCP server in Swift using the official Swift SDK package.\n\n## Project Generation\n\nWhen asked to create a Swift MCP server, generate a complete project with this structure:\n\n```\nmy-mcp-server\u002F\n├── Package.swift\n├── Sources\u002F\n│   └── MyMCPServer\u002F\n│       ├── main.swift\n│       ├── Server.swift\n│       ├── Tools\u002F\n│       │   ├── ToolDefinitions.swift\n│       │   └── ToolHandlers.swift\n│       ├── Resources\u002F\n│       │   ├── ResourceDefinitions.swift\n│       │   └── ResourceHandlers.swift\n│       └── Prompts\u002F\n│           ├── PromptDefinitions.swift\n│           └── PromptHandlers.swift\n├── Tests\u002F\n│   └── MyMCPServerTests\u002F\n│       └── ServerTests.swift\n└── README.md\n```\n\n## Package.swift Template\n\n```swift\n\u002F\u002F swift-tools-version: 6.0\nimport PackageDescription\n\nlet package = Package(\n    name: \"MyMCPServer\",\n    platforms: [\n        .macOS(.v13),\n        .iOS(.v16),\n        .watchOS(.v9),\n        .tvOS(.v16),\n        .visionOS(.v1)\n    ],\n    dependencies: [\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fswift-sdk.git\",\n            from: \"0.10.0\"\n        ),\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fapple\u002Fswift-log.git\",\n            from: \"1.5.0\"\n        ),\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fswift-server\u002Fswift-service-lifecycle.git\",\n            from: \"2.0.0\"\n        )\n    ],\n    targets: [\n        .executableTarget(\n            name: \"MyMCPServer\",\n            dependencies: [\n                .product(name: \"MCP\", package: \"swift-sdk\"),\n                .product(name: \"Logging\", package: \"swift-log\"),\n                .product(name: \"ServiceLifecycle\", package: \"swift-service-lifecycle\")\n            ]\n        ),\n        .testTarget(\n            name: \"MyMCPServerTests\",\n            dependencies: [\"MyMCPServer\"]\n        )\n    ]\n)\n```\n\n## main.swift Template\n\n```swift\nimport MCP\nimport Logging\nimport ServiceLifecycle\n\nstruct MCPService: Service {\n    let server: Server\n    let transport: Transport\n    \n    func run() async throws {\n        try await server.start(transport: transport) { clientInfo, capabilities in\n            logger.info(\"Client connected\", metadata: [\n                \"name\": .string(clientInfo.name),\n                \"version\": .string(clientInfo.version)\n            ])\n        }\n        \n        \u002F\u002F Keep service running\n        try await Task.sleep(for: .days(365 * 100))\n    }\n    \n    func shutdown() async throws {\n        logger.info(\"Shutting down MCP server\")\n        await server.stop()\n    }\n}\n\nvar logger = Logger(label: \"com.example.mcp-server\")\nlogger.logLevel = .info\n\ndo {\n    let server = await createServer()\n    let transport = StdioTransport(logger: logger)\n    let service = MCPService(server: server, transport: transport)\n    \n    let serviceGroup = ServiceGroup(\n        services: [service],\n        configuration: .init(\n            gracefulShutdownSignals: [.sigterm, .sigint]\n        ),\n        logger: logger\n    )\n    \n    try await serviceGroup.run()\n} catch {\n    logger.error(\"Fatal error\", metadata: [\"error\": .string(\"\\(error)\")])\n    throw error\n}\n```\n\n## Server.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nfunc createServer() async -> Server {\n    let server = Server(\n        name: \"MyMCPServer\",\n        version: \"1.0.0\",\n        capabilities: .init(\n            prompts: .init(listChanged: true),\n            resources: .init(subscribe: true, listChanged: true),\n            tools: .init(listChanged: true)\n        )\n    )\n    \n    \u002F\u002F Register tool handlers\n    await registerToolHandlers(server: server)\n    \n    \u002F\u002F Register resource handlers\n    await registerResourceHandlers(server: server)\n    \n    \u002F\u002F Register prompt handlers\n    await registerPromptHandlers(server: server)\n    \n    return server\n}\n```\n\n## ToolDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getToolDefinitions() -> [Tool] {\n    [\n        Tool(\n            name: \"greet\",\n            description: \"Generate a greeting message\",\n            inputSchema: .object([\n                \"type\": .string(\"object\"),\n                \"properties\": .object([\n                    \"name\": .object([\n                        \"type\": .string(\"string\"),\n                        \"description\": .string(\"Name to greet\")\n                    ])\n                ]),\n                \"required\": .array([.string(\"name\")])\n            ])\n        ),\n        Tool(\n            name: \"calculate\",\n            description: \"Perform mathematical calculations\",\n            inputSchema: .object([\n                \"type\": .string(\"object\"),\n                \"properties\": .object([\n                    \"operation\": .object([\n                        \"type\": .string(\"string\"),\n                        \"enum\": .array([\n                            .string(\"add\"),\n                            .string(\"subtract\"),\n                            .string(\"multiply\"),\n                            .string(\"divide\")\n                        ]),\n                        \"description\": .string(\"Operation to perform\")\n                    ]),\n                    \"a\": .object([\n                        \"type\": .string(\"number\"),\n                        \"description\": .string(\"First operand\")\n                    ]),\n                    \"b\": .object([\n                        \"type\": .string(\"number\"),\n                        \"description\": .string(\"Second operand\")\n                    ])\n                ]),\n                \"required\": .array([\n                    .string(\"operation\"),\n                    .string(\"a\"),\n                    .string(\"b\")\n                ])\n            ])\n        )\n    ]\n}\n```\n\n## ToolHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nprivate let logger = Logger(label: \"com.example.mcp-server.tools\")\n\nfunc registerToolHandlers(server: Server) async {\n    await server.withMethodHandler(ListTools.self) { _ in\n        logger.debug(\"Listing available tools\")\n        return .init(tools: getToolDefinitions())\n    }\n    \n    await server.withMethodHandler(CallTool.self) { params in\n        logger.info(\"Tool called\", metadata: [\"name\": .string(params.name)])\n        \n        switch params.name {\n        case \"greet\":\n            return handleGreet(params: params)\n            \n        case \"calculate\":\n            return handleCalculate(params: params)\n            \n        default:\n            logger.warning(\"Unknown tool requested\", metadata: [\"name\": .string(params.name)])\n            return .init(\n                content: [.text(\"Unknown tool: \\(params.name)\")],\n                isError: true\n            )\n        }\n    }\n}\n\nprivate func handleGreet(params: CallTool.Params) -> CallTool.Result {\n    guard let name = params.arguments?[\"name\"]?.stringValue else {\n        return .init(\n            content: [.text(\"Missing 'name' parameter\")],\n            isError: true\n        )\n    }\n    \n    let greeting = \"Hello, \\(name)! Welcome to MCP.\"\n    logger.debug(\"Generated greeting\", metadata: [\"name\": .string(name)])\n    \n    return .init(\n        content: [.text(greeting)],\n        isError: false\n    )\n}\n\nprivate func handleCalculate(params: CallTool.Params) -> CallTool.Result {\n    guard let operation = params.arguments?[\"operation\"]?.stringValue,\n          let a = params.arguments?[\"a\"]?.doubleValue,\n          let b = params.arguments?[\"b\"]?.doubleValue else {\n        return .init(\n            content: [.text(\"Missing or invalid parameters\")],\n            isError: true\n        )\n    }\n    \n    let result: Double\n    switch operation {\n    case \"add\":\n        result = a + b\n    case \"subtract\":\n        result = a - b\n    case \"multiply\":\n        result = a * b\n    case \"divide\":\n        guard b != 0 else {\n            return .init(\n                content: [.text(\"Division by zero\")],\n                isError: true\n            )\n        }\n        result = a \u002F b\n    default:\n        return .init(\n            content: [.text(\"Unknown operation: \\(operation)\")],\n            isError: true\n        )\n    }\n    \n    logger.debug(\"Calculation performed\", metadata: [\n        \"operation\": .string(operation),\n        \"result\": .string(\"\\(result)\")\n    ])\n    \n    return .init(\n        content: [.text(\"Result: \\(result)\")],\n        isError: false\n    )\n}\n```\n\n## ResourceDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getResourceDefinitions() -> [Resource] {\n    [\n        Resource(\n            name: \"Example Data\",\n            uri: \"resource:\u002F\u002Fdata\u002Fexample\",\n            description: \"Example resource data\",\n            mimeType: \"application\u002Fjson\"\n        ),\n        Resource(\n            name: \"Configuration\",\n            uri: \"resource:\u002F\u002Fconfig\",\n            description: \"Server configuration\",\n            mimeType: \"application\u002Fjson\"\n        )\n    ]\n}\n```\n\n## ResourceHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\nimport Foundation\n\nprivate let logger = Logger(label: \"com.example.mcp-server.resources\")\n\nactor ResourceState {\n    private var subscriptions: Set\u003CString> = []\n    \n    func addSubscription(_ uri: String) {\n        subscriptions.insert(uri)\n    }\n    \n    func removeSubscription(_ uri: String) {\n        subscriptions.remove(uri)\n    }\n    \n    func isSubscribed(_ uri: String) -> Bool {\n        subscriptions.contains(uri)\n    }\n}\n\nprivate let state = ResourceState()\n\nfunc registerResourceHandlers(server: Server) async {\n    await server.withMethodHandler(ListResources.self) { params in\n        logger.debug(\"Listing available resources\")\n        return .init(resources: getResourceDefinitions(), nextCursor: nil)\n    }\n    \n    await server.withMethodHandler(ReadResource.self) { params in\n        logger.info(\"Reading resource\", metadata: [\"uri\": .string(params.uri)])\n        \n        switch params.uri {\n        case \"resource:\u002F\u002Fdata\u002Fexample\":\n            let jsonData = \"\"\"\n            {\n                \"message\": \"Example resource data\",\n                \"timestamp\": \"\\(Date())\"\n            }\n            \"\"\"\n            return .init(contents: [\n                .text(jsonData, uri: params.uri, mimeType: \"application\u002Fjson\")\n            ])\n            \n        case \"resource:\u002F\u002Fconfig\":\n            let config = \"\"\"\n            {\n                \"serverName\": \"MyMCPServer\",\n                \"version\": \"1.0.0\"\n            }\n            \"\"\"\n            return .init(contents: [\n                .text(config, uri: params.uri, mimeType: \"application\u002Fjson\")\n            ])\n            \n        default:\n            logger.warning(\"Unknown resource requested\", metadata: [\"uri\": .string(params.uri)])\n            throw MCPError.invalidParams(\"Unknown resource URI: \\(params.uri)\")\n        }\n    }\n    \n    await server.withMethodHandler(ResourceSubscribe.self) { params in\n        logger.info(\"Client subscribed to resource\", metadata: [\"uri\": .string(params.uri)])\n        await state.addSubscription(params.uri)\n        return .init()\n    }\n    \n    await server.withMethodHandler(ResourceUnsubscribe.self) { params in\n        logger.info(\"Client unsubscribed from resource\", metadata: [\"uri\": .string(params.uri)])\n        await state.removeSubscription(params.uri)\n        return .init()\n    }\n}\n```\n\n## PromptDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getPromptDefinitions() -> [Prompt] {\n    [\n        Prompt(\n            name: \"code-review\",\n            description: \"Generate a code review prompt\",\n            arguments: [\n                .init(name: \"language\", description: \"Programming language\", required: true),\n                .init(name: \"focus\", description: \"Review focus area\", required: false)\n            ]\n        )\n    ]\n}\n```\n\n## PromptHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nprivate let logger = Logger(label: \"com.example.mcp-server.prompts\")\n\nfunc registerPromptHandlers(server: Server) async {\n    await server.withMethodHandler(ListPrompts.self) { params in\n        logger.debug(\"Listing available prompts\")\n        return .init(prompts: getPromptDefinitions(), nextCursor: nil)\n    }\n    \n    await server.withMethodHandler(GetPrompt.self) { params in\n        logger.info(\"Getting prompt\", metadata: [\"name\": .string(params.name)])\n        \n        switch params.name {\n        case \"code-review\":\n            return handleCodeReviewPrompt(params: params)\n            \n        default:\n            logger.warning(\"Unknown prompt requested\", metadata: [\"name\": .string(params.name)])\n            throw MCPError.invalidParams(\"Unknown prompt: \\(params.name)\")\n        }\n    }\n}\n\nprivate func handleCodeReviewPrompt(params: GetPrompt.Params) -> GetPrompt.Result {\n    guard let language = params.arguments?[\"language\"]?.stringValue else {\n        return .init(\n            description: \"Missing language parameter\",\n            messages: []\n        )\n    }\n    \n    let focus = params.arguments?[\"focus\"]?.stringValue ?? \"general quality\"\n    \n    let description = \"Code review for \\(language) with focus on \\(focus)\"\n    let messages: [Prompt.Message] = [\n        .user(\"Please review this \\(language) code with focus on \\(focus).\"),\n        .assistant(\"I'll review the code focusing on \\(focus). Please share the code.\"),\n        .user(\"Here's the code to review: [paste code here]\")\n    ]\n    \n    logger.debug(\"Generated code review prompt\", metadata: [\n        \"language\": .string(language),\n        \"focus\": .string(focus)\n    ])\n    \n    return .init(description: description, messages: messages)\n}\n```\n\n## ServerTests.swift Template\n\n```swift\nimport XCTest\n@testable import MyMCPServer\n\nfinal class ServerTests: XCTestCase {\n    func testGreetTool() async throws {\n        let params = CallTool.Params(\n            name: \"greet\",\n            arguments: [\"name\": .string(\"Swift\")]\n        )\n        \n        let result = handleGreet(params: params)\n        \n        XCTAssertFalse(result.isError ?? true)\n        XCTAssertEqual(result.content.count, 1)\n        \n        if case .text(let message) = result.content[0] {\n            XCTAssertTrue(message.contains(\"Swift\"))\n        } else {\n            XCTFail(\"Expected text content\")\n        }\n    }\n    \n    func testCalculateTool() async throws {\n        let params = CallTool.Params(\n            name: \"calculate\",\n            arguments: [\n                \"operation\": .string(\"add\"),\n                \"a\": .number(5),\n                \"b\": .number(3)\n            ]\n        )\n        \n        let result = handleCalculate(params: params)\n        \n        XCTAssertFalse(result.isError ?? true)\n        XCTAssertEqual(result.content.count, 1)\n        \n        if case .text(let message) = result.content[0] {\n            XCTAssertTrue(message.contains(\"8\"))\n        } else {\n            XCTFail(\"Expected text content\")\n        }\n    }\n    \n    func testDivideByZero() async throws {\n        let params = CallTool.Params(\n            name: \"calculate\",\n            arguments: [\n                \"operation\": .string(\"divide\"),\n                \"a\": .number(10),\n                \"b\": .number(0)\n            ]\n        )\n        \n        let result = handleCalculate(params: params)\n        \n        XCTAssertTrue(result.isError ?? false)\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# MyMCPServer\n\nA Model Context Protocol server built with Swift.\n\n## Features\n\n- ✅ Tools: greet, calculate\n- ✅ Resources: example data, configuration\n- ✅ Prompts: code-review\n- ✅ Graceful shutdown with ServiceLifecycle\n- ✅ Structured logging with swift-log\n- ✅ Full test coverage\n\n## Requirements\n\n- Swift 6.0+\n- macOS 13+, iOS 16+, or Linux\n\n## Installation\n\n```bash\nswift build -c release\n```\n\n## Usage\n\nRun the server:\n\n```bash\nswift run\n```\n\nOr with logging:\n\n```bash\nLOG_LEVEL=debug swift run\n```\n\n## Testing\n\n```bash\nswift test\n```\n\n## Development\n\nThe server uses:\n- [MCP Swift SDK](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fswift-sdk) - MCP protocol implementation\n- [swift-log](https:\u002F\u002Fgithub.com\u002Fapple\u002Fswift-log) - Structured logging\n- [swift-service-lifecycle](https:\u002F\u002Fgithub.com\u002Fswift-server\u002Fswift-service-lifecycle) - Graceful shutdown\n\n## Project Structure\n\n- `Sources\u002FMyMCPServer\u002Fmain.swift` - Entry point with ServiceLifecycle\n- `Sources\u002FMyMCPServer\u002FServer.swift` - Server configuration\n- `Sources\u002FMyMCPServer\u002FTools\u002F` - Tool definitions and handlers\n- `Sources\u002FMyMCPServer\u002FResources\u002F` - Resource definitions and handlers\n- `Sources\u002FMyMCPServer\u002FPrompts\u002F` - Prompt definitions and handlers\n- `Tests\u002F` - Unit tests\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\n1. **Ask for project name and description**\n2. **Generate all files** with proper naming\n3. **Use actor-based state** for thread safety\n4. **Include comprehensive logging** with swift-log\n5. **Implement graceful shutdown** with ServiceLifecycle\n6. **Add tests** for all handlers\n7. **Use modern Swift concurrency** (async\u002Fawait)\n8. **Follow Swift naming conventions** (camelCase, PascalCase)\n9. **Include error handling** with proper MCPError usage\n10. **Document public APIs** with doc comments\n\n## Build and Run\n\n```bash\n# Build\nswift build\n\n# Run\nswift run\n\n# Test\nswift test\n\n# Release build\nswift build -c release\n\n# Install\nswift build -c release\ncp .build\u002Frelease\u002FMyMCPServer \u002Fusr\u002Flocal\u002Fbin\u002F\n```\n\n## Integration with Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"my-mcp-server\": {\n      \"command\": \"\u002Fpath\u002Fto\u002FMyMCPServer\"\n    }\n  }\n}\n```\n","# Swift MCP Server Generator\n\nGenerate a complete, production-ready MCP server in Swift using the official Swift SDK package.\n\n## Project Generation\n\nWhen asked to create a Swift MCP server, generate a complete project with this structure:\n\n```\nmy-mcp-server\u002F\n├── Package.swift\n├── Sources\u002F\n│   └── MyMCPServer\u002F\n│       ├── main.swift\n│       ├── Server.swift\n│       ├── Tools\u002F\n│       │   ├── ToolDefinitions.swift\n│       │   └── ToolHandlers.swift\n│       ├── Resources\u002F\n│       │   ├── ResourceDefinitions.swift\n│       │   └── ResourceHandlers.swift\n│       └── Prompts\u002F\n│           ├── PromptDefinitions.swift\n│           └── PromptHandlers.swift\n├── Tests\u002F\n│   └── MyMCPServerTests\u002F\n│       └── ServerTests.swift\n└── README.md\n```\n\n## Package.swift Template\n\n```swift\n\u002F\u002F swift-tools-version: 6.0\nimport PackageDescription\n\nlet package = Package(\n    name: \"MyMCPServer\",\n    platforms: [\n        .macOS(.v13),\n        .iOS(.v16),\n        .watchOS(.v9),\n        .tvOS(.v16),\n        .visionOS(.v1)\n    ],\n    dependencies: [\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fswift-sdk.git\",\n            from: \"0.10.0\"\n        ),\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fapple\u002Fswift-log.git\",\n            from: \"1.5.0\"\n        ),\n        .package(\n            url: \"https:\u002F\u002Fgithub.com\u002Fswift-server\u002Fswift-service-lifecycle.git\",\n            from: \"2.0.0\"\n        )\n    ],\n    targets: [\n        .executableTarget(\n            name: \"MyMCPServer\",\n            dependencies: [\n                .product(name: \"MCP\", package: \"swift-sdk\"),\n                .product(name: \"Logging\", package: \"swift-log\"),\n                .product(name: \"ServiceLifecycle\", package: \"swift-service-lifecycle\")\n            ]\n        ),\n        .testTarget(\n            name: \"MyMCPServerTests\",\n            dependencies: [\"MyMCPServer\"]\n        )\n    ]\n)\n```\n\n## main.swift Template\n\n```swift\nimport MCP\nimport Logging\nimport ServiceLifecycle\n\nstruct MCPService: Service {\n    let server: Server\n    let transport: Transport\n    \n    func run() async throws {\n        try await server.start(transport: transport) { clientInfo, capabilities in\n            logger.info(\"Client connected\", metadata: [\n                \"name\": .string(clientInfo.name),\n                \"version\": .string(clientInfo.version)\n            ])\n        }\n        \n        \u002F\u002F Keep service running\n        try await Task.sleep(for: .days(365 * 100))\n    }\n    \n    func shutdown() async throws {\n        logger.info(\"Shutting down MCP server\")\n        await server.stop()\n    }\n}\n\nvar logger = Logger(label: \"com.example.mcp-server\")\nlogger.logLevel = .info\n\ndo {\n    let server = await createServer()\n    let transport = StdioTransport(logger: logger)\n    let service = MCPService(server: server, transport: transport)\n    \n    let serviceGroup = ServiceGroup(\n        services: [service],\n        configuration: .init(\n            gracefulShutdownSignals: [.sigterm, .sigint]\n        ),\n        logger: logger\n    )\n    \n    try await serviceGroup.run()\n} catch {\n    logger.error(\"Fatal error\", metadata: [\"error\": .string(\"\\(error)\")])\n    throw error\n}\n```\n\n## Server.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nfunc createServer() async -> Server {\n    let server = Server(\n        name: \"MyMCPServer\",\n        version: \"1.0.0\",\n        capabilities: .init(\n            prompts: .init(listChanged: true),\n            resources: .init(subscribe: true, listChanged: true),\n            tools: .init(listChanged: true)\n        )\n    )\n    \n    \u002F\u002F Register tool handlers\n    await registerToolHandlers(server: server)\n    \n    \u002F\u002F Register resource handlers\n    await registerResourceHandlers(server: server)\n    \n    \u002F\u002F Register prompt handlers\n    await registerPromptHandlers(server: server)\n    \n    return server\n}\n```\n\n## ToolDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getToolDefinitions() -> [Tool] {\n    [\n        Tool(\n            name: \"greet\",\n            description: \"Generate a greeting message\",\n            inputSchema: .object([\n                \"type\": .string(\"object\"),\n                \"properties\": .object([\n                    \"name\": .object([\n                        \"type\": .string(\"string\"),\n                        \"description\": .string(\"Name to greet\")\n                    ])\n                ]),\n                \"required\": .array([.string(\"name\")])\n            ])\n        ),\n        Tool(\n            name: \"calculate\",\n            description: \"Perform mathematical calculations\",\n            inputSchema: .object([\n                \"type\": .string(\"object\"),\n                \"properties\": .object([\n                    \"operation\": .object([\n                        \"type\": .string(\"string\"),\n                        \"enum\": .array([\n                            .string(\"add\"),\n                            .string(\"subtract\"),\n                            .string(\"multiply\"),\n                            .string(\"divide\")\n                        ]),\n                        \"description\": .string(\"Operation to perform\")\n                    ]),\n                    \"a\": .object([\n                        \"type\": .string(\"number\"),\n                        \"description\": .string(\"First operand\")\n                    ]),\n                    \"b\": .object([\n                        \"type\": .string(\"number\"),\n                        \"description\": .string(\"Second operand\")\n                    ])\n                ]),\n                \"required\": .array([\n                    .string(\"operation\"),\n                    .string(\"a\"),\n                    .string(\"b\")\n                ])\n            ])\n        )\n    ]\n}\n```\n\n## ToolHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nprivate let logger = Logger(label: \"com.example.mcp-server.tools\")\n\nfunc registerToolHandlers(server: Server) async {\n    await server.withMethodHandler(ListTools.self) { _ in\n        logger.debug(\"Listing available tools\")\n        return .init(tools: getToolDefinitions())\n    }\n    \n    await server.withMethodHandler(CallTool.self) { params in\n        logger.info(\"Tool called\", metadata: [\"name\": .string(params.name)])\n        \n        switch params.name {\n        case \"greet\":\n            return handleGreet(params: params)\n            \n        case \"calculate\":\n            return handleCalculate(params: params)\n            \n        default:\n            logger.warning(\"Unknown tool requested\", metadata: [\"name\": .string(params.name)])\n            return .init(\n                content: [.text(\"Unknown tool: \\(params.name)\")],\n                isError: true\n            )\n        }\n    }\n}\n\nprivate func handleGreet(params: CallTool.Params) -> CallTool.Result {\n    guard let name = params.arguments?[\"name\"]?.stringValue else {\n        return .init(\n            content: [.text(\"Missing 'name' parameter\")],\n            isError: true\n        )\n    }\n    \n    let greeting = \"Hello, \\(name)! Welcome to MCP.\"\n    logger.debug(\"Generated greeting\", metadata: [\"name\": .string(name)])\n    \n    return .init(\n        content: [.text(greeting)],\n        isError: false\n    )\n}\n\nprivate func handleCalculate(params: CallTool.Params) -> CallTool.Result {\n    guard let operation = params.arguments?[\"operation\"]?.stringValue,\n          let a = params.arguments?[\"a\"]?.doubleValue,\n          let b = params.arguments?[\"b\"]?.doubleValue else {\n        return .init(\n            content: [.text(\"Missing or invalid parameters\")],\n            isError: true\n        )\n    }\n    \n    let result: Double\n    switch operation {\n    case \"add\":\n        result = a + b\n    case \"subtract\":\n        result = a - b\n    case \"multiply\":\n        result = a * b\n    case \"divide\":\n        guard b != 0 else {\n            return .init(\n                content: [.text(\"Division by zero\")],\n                isError: true\n            )\n        }\n        result = a \u002F b\n    default:\n        return .init(\n            content: [.text(\"Unknown operation: \\(operation)\")],\n            isError: true\n        )\n    }\n    \n    logger.debug(\"Calculation performed\", metadata: [\n        \"operation\": .string(operation),\n        \"result\": .string(\"\\(result)\")\n    ])\n    \n    return .init(\n        content: [.text(\"Result: \\(result)\")],\n        isError: false\n    )\n}\n```\n\n## ResourceDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getResourceDefinitions() -> [Resource] {\n    [\n        Resource(\n            name: \"Example Data\",\n            uri: \"resource:\u002F\u002Fdata\u002Fexample\",\n            description: \"Example resource data\",\n            mimeType: \"application\u002Fjson\"\n        ),\n        Resource(\n            name: \"Configuration\",\n            uri: \"resource:\u002F\u002Fconfig\",\n            description: \"Server configuration\",\n            mimeType: \"application\u002Fjson\"\n        )\n    ]\n}\n```\n\n## ResourceHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\nimport Foundation\n\nprivate let logger = Logger(label: \"com.example.mcp-server.resources\")\n\nactor ResourceState {\n    private var subscriptions: Set\u003CString> = []\n    \n    func addSubscription(_ uri: String) {\n        subscriptions.insert(uri)\n    }\n    \n    func removeSubscription(_ uri: String) {\n        subscriptions.remove(uri)\n    }\n    \n    func isSubscribed(_ uri: String) -> Bool {\n        subscriptions.contains(uri)\n    }\n}\n\nprivate let state = ResourceState()\n\nfunc registerResourceHandlers(server: Server) async {\n    await server.withMethodHandler(ListResources.self) { params in\n        logger.debug(\"Listing available resources\")\n        return .init(resources: getResourceDefinitions(), nextCursor: nil)\n    }\n    \n    await server.withMethodHandler(ReadResource.self) { params in\n        logger.info(\"Reading resource\", metadata: [\"uri\": .string(params.uri)])\n        \n        switch params.uri {\n        case \"resource:\u002F\u002Fdata\u002Fexample\":\n            let jsonData = \"\"\"\n            {\n                \"message\": \"Example resource data\",\n                \"timestamp\": \"\\(Date())\"\n            }\n            \"\"\"\n            return .init(contents: [\n                .text(jsonData, uri: params.uri, mimeType: \"application\u002Fjson\")\n            ])\n            \n        case \"resource:\u002F\u002Fconfig\":\n            let config = \"\"\"\n            {\n                \"serverName\": \"MyMCPServer\",\n                \"version\": \"1.0.0\"\n            }\n            \"\"\"\n            return .init(contents: [\n                .text(config, uri: params.uri, mimeType: \"application\u002Fjson\")\n            ])\n            \n        default:\n            logger.warning(\"Unknown resource requested\", metadata: [\"uri\": .string(params.uri)])\n            throw MCPError.invalidParams(\"Unknown resource URI: \\(params.uri)\")\n        }\n    }\n    \n    await server.withMethodHandler(ResourceSubscribe.self) { params in\n        logger.info(\"Client subscribed to resource\", metadata: [\"uri\": .string(params.uri)])\n        await state.addSubscription(params.uri)\n        return .init()\n    }\n    \n    await server.withMethodHandler(ResourceUnsubscribe.self) { params in\n        logger.info(\"Client unsubscribed from resource\", metadata: [\"uri\": .string(params.uri)])\n        await state.removeSubscription(params.uri)\n        return .init()\n    }\n}\n```\n\n## PromptDefinitions.swift Template\n\n```swift\nimport MCP\n\nfunc getPromptDefinitions() -> [Prompt] {\n    [\n        Prompt(\n            name: \"code-review\",\n            description: \"Generate a code review prompt\",\n            arguments: [\n                .init(name: \"language\", description: \"Programming language\", required: true),\n                .init(name: \"focus\", description: \"Review focus area\", required: false)\n            ]\n        )\n    ]\n}\n```\n\n## PromptHandlers.swift Template\n\n```swift\nimport MCP\nimport Logging\n\nprivate let logger = Logger(label: \"com.example.mcp-server.prompts\")\n\nfunc registerPromptHandlers(server: Server) async {\n    await server.withMethodHandler(ListPrompts.self) { params in\n        logger.debug(\"Listing available prompts\")\n        return .init(prompts: getPromptDefinitions(), nextCursor: nil)\n    }\n    \n    await server.withMethodHandler(GetPrompt.self) { params in\n        logger.info(\"Getting prompt\", metadata: [\"name\": .string(params.name)])\n        \n        switch params.name {\n        case \"code-review\":\n            return handleCodeReviewPrompt(params: params)\n            \n        default:\n            logger.warning(\"Unknown prompt requested\", metadata: [\"name\": .string(params.name)])\n            throw MCPError.invalidParams(\"Unknown prompt: \\(params.name)\")\n        }\n    }\n}\n\nprivate func handleCodeReviewPrompt(params: GetPrompt.Params) -> GetPrompt.Result {\n    guard let language = params.arguments?[\"language\"]?.stringValue else {\n        return .init(\n            description: \"Missing language parameter\",\n            messages: []\n        )\n    }\n    \n    let focus = params.arguments?[\"focus\"]?.stringValue ?? \"general quality\"\n    \n    let description = \"Code review for \\(language) with focus on \\(focus)\"\n    let messages: [Prompt.Message] = [\n        .user(\"Please review this \\(language) code with focus on \\(focus).\"),\n        .assistant(\"I'll review the code focusing on \\(focus). Please share the code.\"),\n        .user(\"Here's the code to review: [paste code here]\")\n    ]\n    \n    logger.debug(\"Generated code review prompt\", metadata: [\n        \"language\": .string(language),\n        \"focus\": .string(focus)\n    ])\n    \n    return .init(description: description, messages: messages)\n}\n```\n\n## ServerTests.swift Template\n\n```swift\nimport XCTest\n@testable import MyMCPServer\n\nfinal class ServerTests: XCTestCase {\n    func testGreetTool() async throws {\n        let params = CallTool.Params(\n            name: \"greet\",\n            arguments: [\"name\": .string(\"Swift\")]\n        )\n        \n        let result = handleGreet(params: params)\n        \n        XCTAssertFalse(result.isError ?? true)\n        XCTAssertEqual(result.content.count, 1)\n        \n        if case .text(let message) = result.content[0] {\n            XCTAssertTrue(message.contains(\"Swift\"))\n        } else {\n            XCTFail(\"Expected text content\")\n        }\n    }\n    \n    func testCalculateTool() async throws {\n        let params = CallTool.Params(\n            name: \"calculate\",\n            arguments: [\n                \"operation\": .string(\"add\"),\n                \"a\": .number(5),\n                \"b\": .number(3)\n            ]\n        )\n        \n        let result = handleCalculate(params: params)\n        \n        XCTAssertFalse(result.isError ?? true)\n        XCTAssertEqual(result.content.count, 1)\n        \n        if case .text(let message) = result.content[0] {\n            XCTAssertTrue(message.contains(\"8\"))\n        } else {\n            XCTFail(\"Expected text content\")\n        }\n    }\n    \n    func testDivideByZero() async throws {\n        let params = CallTool.Params(\n            name: \"calculate\",\n            arguments: [\n                \"operation\": .string(\"divide\"),\n                \"a\": .number(10),\n                \"b\": .number(0)\n            ]\n        )\n        \n        let result = handleCalculate(params: params)\n        \n        XCTAssertTrue(result.isError ?? false)\n    }\n}\n```\n\n## README.md Template\n\n```markdown\n# MyMCPServer\n\nA Model Context Protocol server built with Swift.\n\n## Features\n\n- ✅ Tools: greet, calculate\n- ✅ Resources: example data, configuration\n- ✅ Prompts: code-review\n- ✅ Graceful shutdown with ServiceLifecycle\n- ✅ Structured logging with swift-log\n- ✅ Full test coverage\n\n## Requirements\n\n- Swift 6.0+\n- macOS 13+, iOS 16+, or Linux\n\n## Installation\n\n```bash\nswift build -c release\n```\n\n## Usage\n\nRun the server:\n\n```bash\nswift run\n```\n\nOr with logging:\n\n```bash\nLOG_LEVEL=debug swift run\n```\n\n## Testing\n\n```bash\nswift test\n```\n\n## Development\n\nThe server uses:\n- [MCP Swift SDK](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fswift-sdk) - MCP protocol implementation\n- [swift-log](https:\u002F\u002Fgithub.com\u002Fapple\u002Fswift-log) - Structured logging\n- [swift-service-lifecycle](https:\u002F\u002Fgithub.com\u002Fswift-server\u002Fswift-service-lifecycle) - Graceful shutdown\n\n## Project Structure\n\n- `Sources\u002FMyMCPServer\u002Fmain.swift` - Entry point with ServiceLifecycle\n- `Sources\u002FMyMCPServer\u002FServer.swift` - Server configuration\n- `Sources\u002FMyMCPServer\u002FTools\u002F` - Tool definitions and handlers\n- `Sources\u002FMyMCPServer\u002FResources\u002F` - Resource definitions and handlers\n- `Sources\u002FMyMCPServer\u002FPrompts\u002F` - Prompt definitions and handlers\n- `Tests\u002F` - Unit tests\n\n## License\n\nMIT\n```\n\n## Generation Instructions\n\n1. **Ask for project name and description**\n2. **Generate all files** with proper naming\n3. **Use actor-based state** for thread safety\n4. **Include comprehensive logging** with swift-log\n5. **Implement graceful shutdown** with ServiceLifecycle\n6. **Add tests** for all handlers\n7. **Use modern Swift concurrency** (async\u002Fawait)\n8. **Follow Swift naming conventions** (camelCase, PascalCase)\n9. **Include error handling** with proper MCPError usage\n10. **Document public APIs** with doc comments\n\n## Build and Run\n\n```bash\n# Build\nswift build\n\n# Run\nswift run\n\n# Test\nswift test\n\n# Release build\nswift build -c release\n\n# Install\nswift build -c release\ncp .build\u002Frelease\u002FMyMCPServer \u002Fusr\u002Flocal\u002Fbin\u002F\n```\n\n## Integration with Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"my-mcp-server\": {\n      \"command\": \"\u002Fpath\u002Fto\u002FMyMCPServer\"\n    }\n  }\n}\n```\n",{"name":5,"description":7},"main","5269f7ea2d6c3a9bfda5ed878b6726cf509121fd","skills\u002Fswift-mcp-server-generator",5340,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot","https:\u002F\u002Fawesome-copilot.github.com\u002F","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-11 13:41:32",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add github\u002Fawesome-copilot --skill swift-mcp-server-generator",{"tool":64,"command":65},"bunx","bunx skills add github\u002Fawesome-copilot --skill swift-mcp-server-generator",{"tool":67,"command":68},"pnpm","pnpm dlx skills add github\u002Fawesome-copilot --skill swift-mcp-server-generator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fswift-mcp-server-generator\u002FSKILL.md",true,[],[73,103,131,160,192,209],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":83,"publishedAt":43},"01M70KXZNX9ES38N2A8M58ZZMZ","supabase-rls-policies","Write, review, and test Supabase Row Level Security (RLS) policies so that one user cannot read or change another user's rows. Use when creating or changing tables, policies, views, or security definer functions in a Supabase project, when reviewing a migration that touches RLS, or when asked to prove user isolation with pgTAP tests that sign in as two users.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fsupabase-rls-policies\u002FSKILL.md",[79,82],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[84,85,86,87,41,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102],"supabase","rls","supabase rls","supabase rls policies","when","review","change","read","write","security","isolation","tables","as","tests","prove","use","users","functions","with",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":110,"publishedAt":43},"01M70KWA5YWXDV6V8DZ19E3T2Y","skill-distribution-audit","Audit a skill collection before release or investigate installer omissions, archived\u002Ftemplate leakage, duplicate identities, and manifest drift. Reconcile the intended public source set, distribution manifest, and actual discovery output for a specified consumer version. Includes a deterministic set-comparison helper.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fskill-distribution-audit\u002FSKILL.md",[109],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130],"distribution","skill distribution audit","audit","SET","deterministic","installer","for","discovery","comparison","helper","manifest","version","collection","drift","output","investigate","duplicate","template","release","reconcile",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":135,"sourceHtmlUrl":136,"categories":137,"keywords":143,"publishedAt":43},"01M70KCJPFVW7PPQ49CC5R8JGK","logicapps-custom-code-net10-migration","Migrate Azure Logic Apps Standard local-function custom-code projects from .NET 8 to .NET 10. Use for legacy Logic Apps custom-code workspace upgrades, project\u002Fpackage configuration, custom-worker settings, publication, and integrated VS Code debugging. Not for ordinary .NET applications, standalone Azure Functions, Consumption workflows, or cloud deployment.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FSKILL.md",[138],{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[144,145,146,147,148,149,117,41,150,151,152,153,154,155,38,99,156,157,158,159],"custom","code","logicapps custom code net10 migration","migration","projects","standalone","deployment","applications","local","azure","worker","upgrades","apps","Legacy","debugging","workflows",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":164,"sourceHtmlUrl":165,"categories":166,"keywords":169,"publishedAt":43},"01M6AEBN37RQMXJ3298PEY7PG1","winmd-api-search","Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI\u002FML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FSKILL.md",[167,168],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":139,"categoryName":140,"taxonomyType":141,"taxonomyTypeDesc":142},[170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,88,185,186,187,188,189,117,190,191],"winmd api search","search","api","windows","desktop","file access","enumeration","ui","ml","file","networking","capabilities","notifications","explore","access","features","full","camera","events","platform","methods","controls",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":196,"licenseFileUrl":197,"sourceHtmlUrl":198,"categories":199,"keywords":205,"publishedAt":43},"01M6AE571R3SC1ZGE202B3NB5S","resemble-detect","Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using Resemble AI","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FSKILL.md",[200,201,204],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":202,"categoryName":203,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[206,114,179,207,208],"resemble detect","https","identity",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":196,"licenseFileUrl":213,"sourceHtmlUrl":214,"categories":215,"keywords":220,"publishedAt":43},"01M6AE30BSK2HCY4TQQ22Z8JRD","quality-playbook","Run a complete quality engineering audit on any codebase. Derives behavioral requirements from the code, generates spec-traced functional tests, runs a three-pass code review with regression tests, executes a multi-model spec audit (Council of Three), and produces a consolidated bug report with TDD-verified patches. Finds the 35% of real defects that structural code review alone cannot catch. Works with any language. Trigger on 'quality playbook', 'spec audit', 'Council of Three', 'fitness-to-purpose', or 'coverage theater'.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FSKILL.md",[216,219],{"categoryNo":217,"categoryName":218,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[221,222,223,224,145,89,9,113,225,226,207,227,228,229,230,231,232,233,234,235,236,237,97,238,39,239,240],"playbook","quality playbook","quality","code review","tdd","run","report","spec","bug report","council","engineering","functional","spec audit","bug","verified","multi-model","three","coverage","regression","structural"]