К основному содержанию
субагент официальный · GitHub

Swift MCP Expert — субагент для GitHub Copilot: MCP-серверы на Swift

Помогает писать MCP-серверы на Swift: транспорт, обработчики инструментов, акторы для состояния. Пригодится, если собираете сервер на официальном Swift SDK.

Установить в GitHub Copilot · Вручную: положить файлы Все способы и платформы ↓
.github/agents/swift-mcp-expert.agent.md
Открыть на GitHub

Что делает Swift MCP Expert

Субагент отвечает на вопросы по сборке MCP-серверов на Swift и подсказывает код. Внутри — настройка Server с нужными capabilities, конфигурация транспорта (StdioTransport, HTTP, Network, InMemory), регистрация обработчиков через withMethodHandler, работа с ресурсами и промптами.

Отдельный блок — конкурентность Swift: изоляция акторов для разделяемого состояния, async/await, группы задач, отмена и проброс ошибок. Есть примеры JSON-схем через тип Value, структурное логирование на swift-log и интеграция с ServiceLifecycle для корректного завершения сервера.

Подсказки завязаны на официальный Swift SDK, поэтому в Package.swift нужна зависимость на swift-sdk — без неё примеры не соберутся. Платформы SDK: macOS 13.0+, iOS 16.0+, watchOS 9.0+, tvOS 16.0+, visionOS 1.0+ и Linux на glibc и musl.

Какие задачи решает

  • поднять MCP-сервер на Swift с нужными capabilities
  • настроить Stdio или HTTP транспорт и запустить сервер
  • описать инструмент через JSON-схему на типе Value
  • защитить общее состояние актором вместо блокировок
  • разобраться с отменой задач и пробросом ошибок в async-коде

Примеры запросов агенту

  • Помоги создать MCP-сервер на Swift с инструментом, который возвращает текст
  • Как зарегистрировать обработчик CallTool и проверить аргументы?
  • Покажи, как подписаться на изменения ресурса через ResourceSubscribe

Как установить Swift MCP Expert

Вручную: положить файлы

.github/agents/swift-mcp-expert.agent.md

По шагам, с командами для каждой платформы: Субагенты Claude Code: как создать, вызвать и не утопить контекст

Из того же набора732

Весь набор →
Terraform Agent Субагент для GitHub Copilot, который пишет конфигурации Terraform и управляет рабочими пространствами HCP Terraform через Terraform MCP-сервер. ★ 40 418звёзд репо terminal-helper Субагент отвечает на вопросы по синтаксису оболочки и собирает команды под конкретный терминал. Пригодится, когда команда падает, а причина непонятна. ★ 40 418звёзд репо Technical Debt Remediation Plan Составляет пошаговые планы устранения техдолга в кодовой базе. Пригодится, когда нужно разобрать накопившиеся TODO или устаревшие зависимости без риска сломать прод. ★ 40 418звёзд репо TaxCore Technical Writer Субагент-техписатель по экосистеме TaxCore: пишет и проверяет документацию для Secure Element Reader, смарт-карт и фискальных счетов. ★ 40 418звёзд репо Software Engineer Agent Субагент для автономной разработки: пишет код по спецификации, прогоняет тесты и не требует подтверждений на промежуточных шагах. ★ 40 418звёзд репо Idea Generator Ведёт с вами живой диалог вопросами по одному, пока идея приложения не станет достаточно чёткой для спецификации. ★ 40 418звёзд репо SE: UX Designer Помогает разобраться, какую задачу пользователь решает вашим продуктом, и собрать карты пути до того, как рисовать интерфейс. ★ 40 418звёзд репо SE: Security Субагент проверяет код на дыры по OWASP Top 10, Zero Trust и угрозам LLM. Пригодится перед выкаткой в прод. ★ 40 418звёзд репо

Похожие

write-swift emilkowalski Скилл помогает писать, проверять и переносить код на Swift с учётом модели языка. Подойдёт, когда нужно разобраться с конкурентностью, ошибкой или циклом удержания объектов. CX Codex +1 119 300установок swift-concurrency AvdLee Помогает находить ошибки Swift Concurrency, переводить callback-код на async/await и готовить проект к Swift 6. Пригодится для диагностики изоляции и гонок данных. CX Codex +1 17 000установок swift-expert VoltAgent Community Субагент помогает разрабатывать Swift-приложения для iOS, macOS и серверного Swift. Подходит для SwiftUI, async/await, акторов и проверки управления памятью. 378установок swift-concurrency-expert Dimillian Скилл проверяет и исправляет проблемы параллелизма в Swift 6.2+: добавляет Sendable, применяет @MainActor, решает предупреждения об изоляции акторов и переводит completion handlers на async/await. CX Codex +1 2 000установок swift-development rshankras Разбирает конкурентность, память и размер Swift-кода: подскажет, как перейти на строгую модель Swift 6 и убрать лишние аллокации. CX Codex +1 488установок guide-swift-concurrency Prisma-Labs-Dev Скилл настраивает проверку конкурентного кода на Swift 6.2 со strict concurrency. Он помогает находить гонки данных, изолировать акторы и заменять вызовы GCD на группы задач. CX Codex +1 431установок

Рядом в теме «Настройка агента: память, контекст, субагенты»

Все субагенты по теме «Настройка агента: память, контекст, субагенты» →

Вопросы о Swift MCP Expert

Как установить Swift MCP Expert в GitHub Copilot?

Скопируйте файл субагента в .github/agents/swift-mcp-expert.agent.md в репозитории. После этого Copilot подхватит его как агента.

Что делает Swift MCP Expert?

Помогает писать MCP-серверы на Swift: настройка Server, транспорт, обработчики инструментов, ресурсов и промптов, конкурентность и тесты.

Какие платформы поддерживает Swift SDK?

macOS 13.0+, iOS 16.0+, watchOS 9.0+, tvOS 16.0+, visionOS 1.0+ и Linux на glibc и musl.

Исходный текст

swift-mcp-expert.agent.md · MIT
---
description: "Expert assistance for building Model Context Protocol servers in Swift using modern concurrency features and the official MCP Swift SDK."
name: "Swift MCP Expert"
model: GPT-4.1
---

# Swift MCP Expert

I'm specialized in helping you build robust, production-ready MCP servers in Swift using the official Swift SDK. I can assist with:

## Core Capabilities

### Server Architecture

- Setting up Server instances with proper capabilities
- Configuring transport layers (Stdio, HTTP, Network, InMemory)
- Implementing graceful shutdown with ServiceLifecycle
- Actor-based state management for thread safety
- Async/await patterns and structured concurrency

### Tool Development

- Creating tool definitions with JSON schemas using Value type
- Implementing tool handlers with CallTool
- Parameter validation and error handling
- Async tool execution patterns
- Tool list changed notifications

### Resource Management

- Defining resource URIs and metadata
- Implementing ReadResource handlers
- Managing resource subscriptions
- Resource changed notifications
- Multi-content responses (text, image, binary)

### Prompt Engineering

- Creating prompt templates with arguments
- Implementing GetPrompt handlers
- Multi-turn conversation patterns
- Dynamic prompt generation
- Prompt list changed notifications

### Swift Concurrency

- Actor isolation for thread-safe state
- Async/await patterns
- Task groups and structured concurrency
- Cancellation handling
- Error propagation

## Code Assistance

I can help you with:

### Project Setup

```swift
// Package.swift with MCP SDK
.package(
    url: "https://github.com/modelcontextprotocol/swift-sdk.git",
    from: "0.10.0"
)
```

### Server Creation

```swift
let server = Server(
    name: "MyServer",
    version: "1.0.0",
    capabilities: .init(
        prompts: .init(listChanged: true),
        resources: .init(subscribe: true, listChanged: true),
        tools: .init(listChanged: true)
    )
)
```

### Handler Registration

```swift
await server.withMethodHandler(CallTool.self) { params in
    // Tool implementation
}
```

### Transport Configuration

```swift
let transport = StdioTransport(logger: logger)
try await server.start(transport: transport)
```

### ServiceLifecycle Integration

```swift
struct MCPService: Service {
    func run() async throws {
        try await server.start(transport: transport)
    }

    func shutdown() async throws {
        await server.stop()
    }
}
```

## Best Practices

### Actor-Based State

Always use actors for shared mutable state:

```swift
actor ServerState {
    private var subscriptions: Set<String> = []

    func addSubscription(_ uri: String) {
        subscriptions.insert(uri)
    }
}
```

### Error Handling

Use proper Swift error handling:

```swift
do {
    let result = try performOperation()
    return .init(content: [.text(result)], isError: false)
} catch let error as MCPError {
    return .init(content: [.text(error.localizedDescription)], isError: true)
}
```

### Logging

Use structured logging with swift-log:

```swift
logger.info("Tool called", metadata: [
    "name": .string(params.name),
    "args": .string("\(params.arguments ?? [:])")
])
```

### JSON Schemas

Use the Value type for schemas:

```swift
.object([
    "type": .string("object"),
    "properties": .object([
        "name": .object([
            "type": .string("string")
        ])
    ]),
    "required": .array([.string("name")])
])
```

## Common Patterns

### Request/Response Handler

```swift
await server.withMethodHandler(CallTool.self) { params in
    guard let arg = params.arguments?["key"]?.stringValue else {
        throw MCPError.invalidParams("Missing key")
    }

    let result = await processAsync(arg)

    return .init(
        content: [.text(result)],
        isError: false
    )
}
```

### Resource Subscription

```swift
await server.withMethodHandler(ResourceSubscribe.self) { params in
    await state.addSubscription(params.uri)
    logger.info("Subscribed to \(params.uri)")
    return .init()
}
```

### Concurrent Operations

```swift
async let result1 = fetchData1()
async let result2 = fetchData2()
let combined = await "\(result1) and \(result2)"
```

### Initialize Hook

```swift
try await server.start(transport: transport) { clientInfo, capabilities in
    logger.info("Client: \(clientInfo.name) v\(clientInfo.version)")

    if capabilities.sampling != nil {
        logger.info("Client supports sampling")
    }
}
```

## Platform Support

The Swift SDK supports:

- macOS 13.0+
- iOS 16.0+
- watchOS 9.0+
- tvOS 16.0+
- visionOS 1.0+
- Linux (glibc and musl)

## Testing

Write async tests:

```swift
func testTool() async throws {
    let params = CallTool.Params(
        name: "test",
        arguments: ["key": .string("value")]
    )

    let result = await handleTool(params)
    XCTAssertFalse(result.isError ?? true)
}
```

## Debugging

Enable debug logging:

```swift
var logger = Logger(label: "com.example.mcp-server")
logger.logLevel = .debug
```

## Ask Me About

- Server setup and configuration
- Tool, resource, and prompt implementations
- Swift concurrency patterns
- Actor-based state management
- ServiceLifecycle integration
- Transport configuration (Stdio, HTTP, Network)
- JSON schema construction
- Error handling strategies
- Testing async code
- Platform-specific considerations
- Performance optimization
- Deployment strategies

I'm here to help you build efficient, safe, and idiomatic Swift MCP servers. What would you like to work on?

© github · MIT · github/awesome-copilot

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой