{"id":"6275aa48-deee-4de9-89fa-3f0449662e5e","shortId":"XMJE92","kind":"skill","title":"Swift Mcp Server Generator","tagline":"Awesome Copilot skill by Github","description":"# 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/\n├── Package.swift\n├── Sources/\n│   └── MyMCPServer/\n│       ├── main.swift\n│       ├── Server.swift\n│       ├── Tools/\n│       │   ├── ToolDefinitions.swift\n│       │   └── ToolHandlers.swift\n│       ├── Resources/\n│       │   ├── ResourceDefinitions.swift\n│       │   └── ResourceHandlers.swift\n│       └── Prompts/\n│           ├── PromptDefinitions.swift\n│           └── PromptHandlers.swift\n├── Tests/\n│   └── MyMCPServerTests/\n│       └── ServerTests.swift\n└── README.md\n```\n\n## Package.swift Template\n\n```swift\n// 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://github.com/modelcontextprotocol/swift-sdk.git\",\n            from: \"0.10.0\"\n        ),\n        .package(\n            url: \"https://github.com/apple/swift-log.git\",\n            from: \"1.5.0\"\n        ),\n        .package(\n            url: \"https://github.com/swift-server/swift-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        // 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    // Register tool handlers\n    await registerToolHandlers(server: server)\n    \n    // Register resource handlers\n    await registerResourceHandlers(server: server)\n    \n    // 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 / 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://data/example\",\n            description: \"Example resource data\",\n            mimeType: \"application/json\"\n        ),\n        Resource(\n            name: \"Configuration\",\n            uri: \"resource://config\",\n            description: \"Server configuration\",\n            mimeType: \"application/json\"\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<String> = []\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://data/example\":\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/json\")\n            ])\n            \n        case \"resource://config\":\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/json\")\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://github.com/modelcontextprotocol/swift-sdk) - MCP protocol implementation\n- [swift-log](https://github.com/apple/swift-log) - Structured logging\n- [swift-service-lifecycle](https://github.com/swift-server/swift-service-lifecycle) - Graceful shutdown\n\n## Project Structure\n\n- `Sources/MyMCPServer/main.swift` - Entry point with ServiceLifecycle\n- `Sources/MyMCPServer/Server.swift` - Server configuration\n- `Sources/MyMCPServer/Tools/` - Tool definitions and handlers\n- `Sources/MyMCPServer/Resources/` - Resource definitions and handlers\n- `Sources/MyMCPServer/Prompts/` - Prompt definitions and handlers\n- `Tests/` - 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/await)\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/release/MyMCPServer /usr/local/bin/\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\": \"/path/to/MyMCPServer\"\n    }\n  }\n}\n```","tags":["swift","mcp","server","generator","awesome","copilot","github"],"capabilities":["skill","source-github","category-awesome-copilot"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/swift-mcp-server-generator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under github/awesome-copilot","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T09:40:13.641Z","embedding":null,"createdAt":"2026-04-18T20:26:06.007Z","updatedAt":"2026-04-22T09:40:13.641Z","lastSeenAt":"2026-04-22T09:40:13.641Z","tsv":"'/apple/swift-log)':1237 '/apple/swift-log.git':107 '/modelcontextprotocol/swift-sdk)':1228 '/modelcontextprotocol/swift-sdk.git':100 '/path/to/mymcpserver':1393 '/swift-server/swift-service-lifecycle)':1246 '/swift-server/swift-service-lifecycle.git':114 '/usr/local/bin':1378 '0':588,1066,1111,1138 '0.10.0':102 '1':1059,1104,1281 '1.0.0':277,764 '1.5.0':109 '10':1135,1345 '100':198 '13':1188 '16':1190 '2':1288 '2.0.0':116 '3':1093,1295 '365':197 '4':1304 '5':1090,1312 '6':1318 '6.0':76,1186 '7':1324 '8':1114,1330 '9':1337 'actor':675,1298 'actor-bas':1297 'add':376,570,1087,1319,1383 'addsubscript':682 'api':1348 'application/json':649,659,756,773 'area':861 'argument':846,1045,1084,1129 'array':351,374,407 'ask':33,1282 'assist':983 'async':169,201,269,431,708,881,1038,1077,1122 'async/await':1329 'avail':438,716,889 'await':172,193,208,221,248,297,304,311,432,444,709,724,789,803,808,822,882,897 'awesom':5 'b':397,413,549,551,573,578,583,587,601,1091,1136 'base':1299 'bash':1194,1203,1209,1216,1355 'bool':697 'build':1196,1352,1356,1358,1366,1368,1373 'build/release/mymcpserver':1377 'built':1156 'c':1197,1369,1374 'calcul':356,360,465,613,1083,1128,1162 'call':451 'calltool.params':492,535,1042,1081,1126 'calltool.result':493,536 'calltool.self':446 'camelcas':1335 'capabl':177,278 'case':458,464,569,574,579,584,738,757,911,1061,1106 'catch':250 'category-awesome-copilot' 'class':1033 'claud':1381 'claude_desktop_config.json':1385 'client':180,795,814 'clientinfo':176 'clientinfo.name':185 'clientinfo.version':188 'code':838,843,913,962,978,988,995,1000,1004,1008,1169 'code-review':837,912,1168 'com.example.mcp':214 'com.example.mcp-server.prompts':876 'com.example.mcp-server.resources':674 'com.example.mcp-server.tools':426 'command':1392 'comment':1351 'complet':16,42 'comprehens':1306 'concurr':1328 'config':654,758,760,769 'configur':240,652,657,1166,1258 'connect':181 'content':481,503,526,556,592,605,624,750,767,1074,1119 'context':1153 'convent':1334 'copilot':6 'coverag':1183 'cp':1376 'creat':35 'createserv':222,268 'data':641,647,745,1165 'data/example':643,739 'date':747 'day':196 'debug':1212 'default':470,602,774,919 'definit':1261,1266,1271 'depend':95,121,147 'descript':328,345,357,383,393,402,644,655,840,850,858,948,961,1020,1021,1287 'desktop':1382 'develop':1219 'divid':382,585,1132 'divis':594 'doc':1350 'document':1346 'doubl':566 'doublevalu':547,552 'els':500,553,589,945,1070,1115 'entri':1252 'enum':373 'error':253,255,257,259,1339 'exampl':640,645,743,1164 'executabletarget':118 'expect':1072,1117 'fals':530,629,863,1146 'fatal':252 'featur':1159 'file':1291 'final':1032 'first':395 'focus':857,860,954,956,967,969,980,982,989,991,1015,1017 'follow':1331 'foundat':668 'full':1181 'func':167,199,267,322,427,489,532,635,681,687,693,704,832,877,934,1036,1075,1120 'general':958 'generat':4,13,14,31,40,329,518,841,1007,1279,1289 'get':903 'getprompt.params':937 'getprompt.result':938 'getprompt.self':899 'getpromptdefinit':833,894 'getresourcedefinit':636,721 'gettooldefinit':323,443 'github':9 'github.com':99,106,113,1227,1236,1245 'github.com/apple/swift-log)':1235 'github.com/apple/swift-log.git':105 'github.com/modelcontextprotocol/swift-sdk)':1226 'github.com/modelcontextprotocol/swift-sdk.git':98 'github.com/swift-server/swift-service-lifecycle)':1244 'github.com/swift-server/swift-service-lifecycle.git':112 'grace':1171,1247,1314 'gracefulshutdownsign':242 'greet':327,331,349,459,511,519,528,1044,1161 'guard':494,537,586,939 'handl':1340 'handlecalcul':467,533,1096,1141 'handlecodereviewprompt':916,935 'handlegreet':461,490,1051 'handler':296,303,310,1263,1268,1273,1323 'hello':512 'implement':1231,1313 'import':77,152,154,156,263,265,320,417,419,633,663,665,667,830,867,869,1027,1030 'includ':1305,1338 'info':217 'init':241,279,281,285,291,441,480,502,525,555,591,604,623,719,749,766,807,826,847,855,892,947,1019 'inputschema':333,361 'instal':1193,1371 'instruct':1280 'integr':1379 'invalid':560 'io':87,1189 'iserror':486,508,529,562,597,610,628 'issubscrib':694 'json':1386 'jsondata':741,752 'keep':189 'label':213,425,673,875 'languag':849,852,941,943,950,965,977,1012,1014 'let':79,161,164,219,223,228,235,271,422,495,510,538,543,548,564,670,701,740,759,872,940,953,960,970,1040,1049,1063,1079,1094,1108,1124,1139 'level':1211 'licens':1277 'lifecycl':143,1243 'linux':1192 'list':437,715,888 'listchang':282,288,292 'listprompts.self':884 'listresources.self':711 'listtools.self':434 'll':985 'log':131,135,155,266,420,666,870,1176,1180,1208,1210,1234,1239,1307,1311 'logger':211,212,226,227,245,246,423,424,671,672,873,874 'logger.debug':436,517,612,714,887,1006 'logger.error':251 'logger.info':179,203,449,729,794,813,902 'logger.loglevel':216 'logger.warning':471,775,920 'maco':85,1187 'main.swift':54,149 'markdown':1149 'mathemat':359 'mcp':2,11,20,38,49,124,153,206,264,321,418,516,634,664,831,868,1223,1229,1390 'mcperror':1343 'mcperror.invalidparams':784,929 'mcpserver':1387 'mcpservic':159,230 'messag':332,742,952,971,1022,1023,1064,1109 'message.contains':1068,1113 'metadata':182,254,452,475,520,615,732,779,799,818,905,924,1011 'mimetyp':648,658,755,772 'miss':505,558,949 'mit':1278 'model':1152 'modern':1326 'multipli':380,580 'my-mcp-serv':47,1388 'mymcpserv':53,83,120,148,275,762,1031,1150 'mymcpservertest':66,146 'name':82,119,123,130,137,145,183,274,326,340,347,353,355,453,476,496,498,506,513,521,523,639,651,836,848,856,906,925,1043,1046,1082,1127,1285,1294,1333 'nextcursor':722,895 'nil':723,896 'number':392,401,1089,1092,1134,1137 'object':334,337,339,341,362,365,367,369,389,398 'offici':26 'oper':368,385,409,539,541,568,608,609,616,618,1085,1130 'operand':396,405 'packag':29,80,81,96,103,110,125,132,139 'package.swift':51,69 'packagedescript':78 'param':447,462,463,468,469,491,534,712,727,792,811,885,900,917,918,936,1041,1052,1053,1080,1097,1098,1125,1142,1143 'paramet':507,561,951 'params.arguments':497,540,545,550,942,955 'params.name':455,457,478,485,908,910,927,932 'params.uri':735,737,754,771,782,788,802,805,821,824 'pascalcas':1336 'past':1003 'perform':358,387,614 'platform':84 'pleas':974,992 'point':1253 'privat':421,488,531,669,677,700,871,933 'product':18,122,129,136 'production-readi':17 'program':851 'project':30,43,1249,1284 'prompt':62,280,309,834,835,845,890,893,904,922,931,1010,1167,1270 'prompt.message':972 'promptdefinitions.swift':63,827 'prompthandlers.swift':64,864 'proper':1293,1342 'properti':338,366 'protocol':1154,1230 'public':1347 'qualiti':959 'read':730 'readi':19 'readme.md':68,1147 'readresource.self':726 'regist':294,301,308 'registerprompthandl':312,878 'registerresourcehandl':305,705 'registertoolhandl':298,428 'releas':1198,1365,1370,1375 'removesubscript':688 'request':474,778,923 'requir':350,406,853,862,1184 'resourc':59,284,302,637,638,646,650,717,720,731,744,777,786,798,817,1163,1265 'resourcedefinitions.swift':60,630 'resourcehandlers.swift':61,660 'resourcest':676,703 'resourcesubscribe.self':791 'resourceunsubscribe.self':810 'result':565,571,576,581,599,619,621,626,627,1050,1095,1140 'result.content':1065,1110 'result.content.count':1058,1103 'result.iserror':1055,1100,1145 'return':315,440,460,466,479,501,524,554,590,603,622,718,748,765,806,825,891,915,946,1018 'review':839,844,859,914,963,975,986,1002,1009,1170 'run':168,191,1200,1205,1214,1354,1359,1361 'safeti':1303 'sdk':28,128,1225 'second':404 'server':3,12,21,39,50,162,163,207,215,220,231,232,270,272,273,299,300,306,307,313,314,316,429,430,656,706,707,879,880,1155,1202,1221,1257,1391 'server.start':173 'server.stop':209 'server.swift':55,260 'server.withmethodhandler':433,445,710,725,790,809,883,898 'servernam':761 'servertest':1034 'servertests.swift':67,1024 'servic':142,160,190,229,238,239,1242 'servicegroup':236,237 'servicegroup.run':249 'servicelifecycl':138,157,1174,1255,1317 'set':680 'share':993 'shut':204 'shutdown':200,1172,1248,1315 'sigint':244 'sigterm':243 'skill':7 'sourc':52 'source-github' 'sources/mymcpserver/main.swift':1251 'sources/mymcpserver/prompts':1269 'sources/mymcpserver/resources':1264 'sources/mymcpserver/server.swift':1256 'sources/mymcpserver/tools':1259 'state':702,1300 'state.addsubscription':804 'state.removesubscription':823 'stdiotransport':225 'string':184,187,256,336,343,344,346,352,364,371,372,375,377,379,381,384,391,394,400,403,408,410,412,454,477,522,617,620,684,690,696,734,781,801,820,907,926,1013,1016,1047,1086,1131 'stringvalu':499,542,944,957 'struct':158 'structur':46,1175,1238,1250 'subscrib':286,796 'subscript':679 'subscriptions.contains':698 'subscriptions.insert':685 'subscriptions.remove':691 'subtract':378,575 'swift':1,10,23,27,37,71,73,127,134,141,151,262,319,416,632,662,829,866,1026,1048,1069,1158,1179,1185,1195,1204,1213,1217,1224,1233,1241,1310,1327,1332,1357,1360,1363,1367,1372 'swift-log':133,1178,1232,1309 'swift-sdk':126 'swift-service-lifecycl':140,1240 'swift-tools-vers':72 'switch':456,567,736,909 'target':117 'task.sleep':194 'templat':70,150,261,318,415,631,661,828,865,1025,1148 'test':65,1182,1215,1218,1274,1276,1320,1362,1364 'testabl':1029 'testcalculatetool':1076 'testdividebyzero':1121 'testgreettool':1037 'testtarget':144 'text':482,504,527,557,593,606,625,751,768,1062,1073,1107,1118 'thread':1302 'throw':170,202,258,783,928,1039,1078,1123 'timestamp':746 'tool':56,74,290,295,324,325,354,439,442,450,473,484,1160,1260 'tooldefinitions.swift':57,317 'toolhandlers.swift':58,414 'transport':165,166,174,175,224,233,234 'tri':171,192,247 'true':283,287,289,293,487,509,563,598,611,854,1056,1101 'tvos':91 'type':335,342,363,370,390,399 'unit':1275 'unknown':472,483,607,776,785,921,930 'unsubscrib':815 'uri':642,653,683,686,689,692,695,699,733,753,770,780,787,800,819 'url':97,104,111 'usag':1199,1344 'use':24,1222,1296,1325 'user':973,996 'v1':94 'v13':86 'v16':88,92 'v9':90 'var':210,678 'version':75,186,276,763 'visiono':93 'watcho':89 'welcom':514 'xctassertequ':1057,1102 'xctassertfals':1054,1099 'xctasserttru':1067,1112,1144 'xctest':1028 'xctestcas':1035 'xctfail':1071,1116 'zero':596","prices":[{"id":"25886889-1876-47c4-a550-af6d00d96882","listingId":"6275aa48-deee-4de9-89fa-3f0449662e5e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:06.007Z"}],"sources":[{"listingId":"6275aa48-deee-4de9-89fa-3f0449662e5e","source":"github","sourceId":"github/awesome-copilot/swift-mcp-server-generator","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/swift-mcp-server-generator","isPrimary":false,"firstSeenAt":"2026-04-18T21:51:24.641Z","lastSeenAt":"2026-04-22T06:52:32.618Z"},{"listingId":"6275aa48-deee-4de9-89fa-3f0449662e5e","source":"skills_sh","sourceId":"github/awesome-copilot/swift-mcp-server-generator","sourceUrl":"https://skills.sh/github/awesome-copilot/swift-mcp-server-generator","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:06.007Z","lastSeenAt":"2026-04-22T09:40:13.641Z"}],"details":{"listingId":"6275aa48-deee-4de9-89fa-3f0449662e5e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"swift-mcp-server-generator","source":"skills_sh","category":"awesome-copilot","skills_sh_url":"https://skills.sh/github/awesome-copilot/swift-mcp-server-generator"},"updatedAt":"2026-04-22T09:40:13.641Z"}}