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