Initial commit

This commit is contained in:
Mattt Zmuda 2025-02-05 11:13:57 -08:00
commit cc603d35fe
No known key found for this signature in database

115
README.md Normal file
View file

@ -0,0 +1,115 @@
# MCP Swift SDK
A Swift implementation of the Model Context Protocol (MCP) client. This SDK provides a modern, Swift-native way to interact with MCP servers.
## Features
- Full async/await support
- Type-safe API
- Resource management
- Tool integration
- Configurable transport layer
- Swift concurrency with actor-based design
## Requirements
- Swift 5.7+
- macOS 12.0+
- iOS 15.0+
- tvOS 15.0+
- watchOS 8.0+
## Installation
### Swift Package Manager
Add the following to your `Package.swift` file:
```swift
dependencies: [
.package(url: "https://github.com/yourusername/mcp-swift-sdk.git", from: "1.0.0")
]
```
## Usage
### Basic Setup
```swift
import MCP
// Create a transport (e.g., StdioTransport)
let transport = StdioTransport(command: "/path/to/server")
// Create client info
let clientInfo = Implementation(name: "MyApp", version: "1.0.0")
// Initialize the client
let client = MCPClient(transport: transport, clientInfo: clientInfo)
// Connect and initialize
try await client.connect()
let result = try await client.initialize()
```
### Working with Resources
```swift
// List available resources
let resources = try await client.listResources()
// Read a resource
let resource = try await client.readResource("resource://example")
// Subscribe to resource updates
try await client.subscribeResource("resource://example")
// Unsubscribe from resource updates
try await client.unsubscribeResource("resource://example")
```
### Working with Tools
```swift
// List available tools
let tools = try await client.listTools()
// Call a tool
let result = try await client.callTool(name: "example-tool", arguments: ["key": "value"])
```
### Custom Transport
You can create your own transport by implementing the `MCPTransport` protocol:
```swift
public protocol MCPTransport {
func connect() async throws
func disconnect() async
func sendRequest(_ data: Data) async throws -> Data
func sendNotification(_ data: Data) async throws
}
```
## Error Handling
The SDK uses the `MCPError` type for error handling:
```swift
public enum MCPError: LocalizedError {
case connectionClosed
case invalidResponse
case invalidParams(String)
case serverError(String)
case protocolError(String)
case transportError(Error)
}
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
This project is licensed under the MIT License - see the LICENSE file for details.