swift-mcp

An MCP server that brings best practices from leading iOS developers directly to your AI assistant.

swift-patterns-mcp

An MCP server providing curated Swift and SwiftUI best practices from leading iOS developers โ€” with intelligent search, persistent memory, and optional premium integrations.

Want an Agent Skill?

If you want a lightweight, portable Swift/SwiftUI best-practices package without runtime tooling, check out:

swift-patterns-skill: Designed as a portable Agent Skill focused on Swift/SwiftUI patterns, architecture guidance, and decision-making frameworks.

Key difference:

  • swift-patterns-skill = Static guidance (portable, no runtime)
  • swift-patterns-mcp = Dynamic tooling (search, retrieval, premium features)

Note: This repo is an MCP server only. It does not ship an Agent Skill (SKILL.md) or skill references.

What does this MCP provide?

swift-patterns-mcp delivers runtime tools for accessing Swift/SwiftUI best practices:

  • ๐Ÿ”Ž Search & retrieval across curated sources
  • ๐Ÿง  Persistent memory with cross-session recall
  • ๐Ÿ”„ Auto-refreshing content from RSS feeds and GitHub
  • ๐ŸŽฏ Intelligent filtering by quality and relevance
  • ๐Ÿ” Premium integrations (optional Patreon support)

Ideal for:

  • Active Development: "How do I implement pull-to-refresh in SwiftUI?" answered instantly without leaving your IDE
  • Architecture Decisions: Compare MVVM vs. TCA patterns with concrete examples from trusted sources
  • Staying Current: Access the latest patterns and best practices as they're published by leading iOS developers
  • Team Standards: Build a searchable reference of approved patterns for your organization
  • AI-Powered Workflows: Enable agents to query "Show me Sundell's approach to dependency injection" with consistent, quality responses

๐ŸŒŸ Features

  • ๐ŸŽ“ Expert Knowledge Base: Patterns from Swift by Sundell, Antoine van der Lee, Nil Coalescing, and more
  • ๐Ÿ” Intelligent Search: Query by topic, pattern, or specific iOS concept
  • ๐Ÿ’พ Persistent Memory: Cross-session recall with Memvid storage
  • ๐Ÿง  Semantic Search: Optional AI-powered fallback for better conceptual matches
  • ๐Ÿ“š Multiple Sources: Aggregates knowledge from trusted educators
  • ๐Ÿ”„ Auto-Updates: Content refreshes automatically from RSS feeds
  • โšก Fast Performance: Efficient caching and indexed search

Content Sources

Free Sources

These sources are publicly available but benefit from MCP's fetching, caching, and search capabilities:

SourceContent TypeUpdates
Swift by SundellArticles, patterns, best practicesWeekly
SwiftLeeTutorials, tips, deep divesWeekly
Nil CoalescingSwiftUI patterns, Swift tipsWeekly
Point-FreeOpen-source libraries, patternsOn release

Premium Sources

Premium content requires OAuth authentication and active subscriptions:

SourceWhat You GetAuthentication
PatreonPremium content from supported creatorsOAuth 2.0

Access exclusive content from top iOS educators: Kavsoft, SwiftUI Codes, sucodee and many more. Get tutorials, code samples, and expert guidance directly from creators you support.

๐Ÿ“‹ Prerequisites

  • Node.js 18.0.0 or higher
  • MCP-Compatible AI Assistant: Claude Desktop, Cursor, Windsurf, VS Code with Copilot, or Claude Code

๐Ÿš€ Quick Start

Run Setup

npx -y swift-patterns-mcp@latest

In an interactive terminal, this opens the setup wizard.
When launched by an MCP client (non-interactive stdio), it runs as the MCP server automatically.

Interactive Setup Wizard

npx -y swift-patterns-mcp@latest setup

If installed globally, you can also run:

swift-patterns-mcp setup

The wizard helps you choose:

  • Config scope (local project vs global)
  • MCP client (Cursor, Claude Code, Windsurf, VS Code)
  • Optional Patreon setup prompt

Non-interactive Setup (CI/Scripts)

# Cursor
npx -y swift-patterns-mcp@latest setup --cursor --global
npx -y swift-patterns-mcp@latest setup --cursor --local

# Claude Code
npx -y swift-patterns-mcp@latest setup --claude --global

# Windsurf
npx -y swift-patterns-mcp@latest setup --windsurf --global

# VS Code
npx -y swift-patterns-mcp@latest setup --vscode --local

# All clients
npx -y swift-patterns-mcp@latest setup --all --global

Use --global (-g) or --local (-l) to skip the location prompt.
Use --cursor, --claude, --windsurf, --vscode, or --all to skip the client prompt.

Configure Your AI Assistant

Cursor

Install MCP Server

Or manually add to Cursor Settings โ†’ Tools โ†’ MCP Servers:

.cursor/mcp.json:

{
  "mcpServers": {
    "swift-patterns": {
      "command": "npx",
      "args": ["-y", "swift-patterns-mcp@latest"]
    }
  }
}

Alternatively, add to ~/.cursor/mcp.json. See Cursor documentation for details.

Claude Code

Run in your terminal:

claude mcp add swift-patterns -- npx -y swift-patterns-mcp@latest

Or manually add to .mcp.json:

{
  "mcpServers": {
    "swift-patterns": {
      "command": "npx",
      "args": ["-y", "swift-patterns-mcp@latest"]
    }
  }
}

Restart Claude Code and run /mcp to verify. See Claude Code MCP documentation for details.

Windsurf

Add to .windsurf/mcp.json:

{
  "mcpServers": {
    "swift-patterns": {
      "command": "npx",
      "args": ["-y", "swift-patterns-mcp@latest"]
    }
  }
}

Restart Windsurf to activate. See Windsurf MCP documentation for details.

VS Code

Add to .vscode/mcp.json:

{
  "mcp": {
    "servers": {
      "swift-patterns": {
        "command": "npx",
        "args": ["-y", "swift-patterns-mcp@latest"]
      }
    }
  }
}

Open .vscode/mcp.json and click Start next to the swift-patterns server. See VS Code MCP documentation for details.

Test It Out

Try these queries:

"Show me SwiftUI animation patterns"
"What does Sundell say about testing?"
"Explain navigation patterns in SwiftUI"

๐Ÿ”ง Configuration

Configuration is automatically created at ~/.swift-patterns-mcp/config.json:

{
  "sources": {
    "sundell": { "enabled": true },
    "vanderlee": { "enabled": true },
    "nilcoalescing": { "enabled": true },
    "pointfree": { "enabled": true },
    "patreon": { "enabled": false, "configured": false }
  },
  "prefetchSources": true,
  "semanticRecall": {
    "enabled": false,
    "minLexicalScore": 0.35,
    "minRelevanceScore": 70
  },
  "memvid": {
    "enabled": true,
    "autoStore": true,
    "useEmbeddings": false,
    "embeddingModel": "bge-small"
  }
}

Note: configured only applies to premium sources. Free sources are treated as configured by default.

Persistent Memory with Memvid

Memvid provides persistent semantic memory that improves recall across sessions. Unlike in-memory caching, Memvid stores patterns in a single-file database that persists between server restarts.

Features:

  • ๐Ÿ’พ Persistent Storage: Patterns stored in ~/.swift-patterns-mcp/swift-patterns-memory.mv2
  • ๐Ÿ” Cross-Session Recall: Find patterns from previous searches after server restart
  • ๐Ÿง  Semantic Search: Optional embedding-based similarity search
  • ๐Ÿš€ Automatic Storage: Patterns stored during searches
  • โšก Fast Retrieval: Built-in BM25 + optional vector search

Configuration:

{
  "memvid": {
    "enabled": true,              // Enable Memvid persistent memory
    "autoStore": true,            // Automatically store patterns during searches
    "useEmbeddings": false,       // Use semantic embeddings (requires model download)
    "embeddingModel": "bge-small" // Options: "bge-small", "openai-small"
  }
}

When to enable:

  • You want patterns to persist across server restarts
  • You frequently search for similar topics
  • You need cross-session semantic memory

Note: Memvid complements MiniSearch (fast in-session search) and semantic recall (in-session fallback). All three work together:

  1. MiniSearch: Fast lexical search within current session
  2. Semantic recall: Activates for poor lexical results (in-session)
  3. Memvid: Cross-session persistent memory and recall

Semantic Recall (Optional AI Enhancement)

Semantic recall provides AI-powered semantic search as a fallback when keyword search returns poor results. It uses transformer embeddings to understand query intent and find conceptually similar patterns.

Features:

  • ๐Ÿง  Automatically activates when keyword search scores are low
  • ๐ŸŽฏ Uses sentence transformers to understand meaning beyond keywords
  • ๐Ÿ“Š Quality filtering to index only high-relevance patterns
  • โšก Efficient embedding caching

Configuration:

{
  "semanticRecall": {
    "enabled": false,              // Enable semantic recall
    "minLexicalScore": 0.35,       // Activate when keyword search < 0.35
    "minRelevanceScore": 70        // Only index patterns with score >= 70
  }
}

When to enable:

  • Your queries use conceptual terms that don't match exact keywords
  • You want more intelligent, context-aware search results
  • You're okay with slightly slower first-time searches (embeddings need to compute)

Note: Requires downloading a ~50MB transformer model on first use. Embeddings are cached for performance.

Environment Variables (Optional)

Patreon

All three variables are required for Patreon content fetching:

VariableDescription
PATREON_CLIENT_IDOAuth client ID from your Patreon app
PATREON_CLIENT_SECRETOAuth client secret from your Patreon app
YOUTUBE_API_KEYEnables searching YouTube videos from Patreon creators. Get API key

Add to your MCP client config:

{
  "mcpServers": {
    "swift-patterns": {
      "command": "npx",
      "args": ["-y", "swift-patterns-mcp@latest"],
      "env": {
        "PATREON_CLIENT_ID": "your_client_id",
        "PATREON_CLIENT_SECRET": "your_client_secret",
        "YOUTUBE_API_KEY": "your_youtube_api_key"
      }
    }
  }
}

๐Ÿ’ก Usage Examples

Basic Queries

"How can I use lazy var in @Observable classes?"
"Show me modern SwiftUI animation best practices using symbolEffect (with button + state examples)"
"Explain common SwiftUI navigation patterns (NavigationStack, NavigationPath, enum routing) and when to use each"

Advanced Queries

"Build a coordinator-style architecture for SwiftUI: MVVM + dependency injection + type-safe routing"
"Give me a clean infinite scrolling implementation: pagination, dedupe, cancellation, and loading states"
"Explain how @Observable improves SwiftUI performance vs ObservableObject, then refactor my view model to @Observable"

With Patreon Integration

"Build a SwiftUI parallax + sticky header screen like a profile page (include reusable component version)"
"Show me how to build a photo editor flow: PhotosPicker -> crop -> filters -> export/share"
"Give me 5 advanced SwiftUI micro-interactions (toasts, sheets, draggable cards, haptics) with production-ready code"

๐Ÿ” Premium Integration (Optional)

Patreon Setup

Access premium content from iOS creators you support:

swift-patterns-mcp patreon setup

Follow the interactive wizard to:

  1. Verify environment variables are configured
  2. Complete OAuth authentication
  3. Fetch and verify content from your subscriptions

๐Ÿ“– Detailed Guide: Patreon Setup Documentation

Requirements

  • Active Patreon account with at least one iOS creator subscription
  • Patreon Creator account (free - no need to launch a creator page)
  • 10 minutes for one-time OAuth setup

Why Creator Account?

Patreon requires OAuth apps to be registered by creators. You don't need to launch a creator page or become an active creator - just register as one to create an OAuth app for personal use.

What You Get

  • โœ… Access to premium tutorials and patterns from creators you support
  • โœ… Automatic extraction of code from downloadable content
  • โœ… Quality filtering and advanced search
  • โœ… Multi-creator support
  • โœ… Private, secure authentication

โš™๏ธ Commands

# List all content sources and status
swift-patterns-mcp sources

# Interactive onboarding/configuration wizard
swift-patterns-mcp setup

# Patreon integration
swift-patterns-mcp patreon setup     # Connect your Patreon account
swift-patterns-mcp patreon status    # Check connection status
swift-patterns-mcp patreon reset     # Clear authentication data

๐Ÿ—ƒ๏ธ How It Works

graph LR
    A[AI Assistant] --> B[swift-patterns-mcp Server]
    B --> C[Free Sources]
    B --> D[Premium Sources]
    C --> E[Swift by Sundell RSS]
    C --> F[Antoine van der Lee RSS]
    C --> G[Nil Coalescing RSS]
    C --> H[Point-Free GitHub]
    D --> I[Patreon API]
  1. Query: Receives a query through the MCP protocol
  2. Processing: Searches enabled sources based on the query
  3. Content Retrieval: Fetches and parses content from RSS feeds, APIs, and cached data
  4. Quality Filtering: Applies configurable quality thresholds
  5. Response: Returns formatted, relevant patterns and examples

๐Ÿ”ง Troubleshooting

Common Issues

Node version incompatible

node --version  # Should be >= 18.0.0

Sources not returning results

swift-patterns-mcp sources
ls ~/.swift-patterns-mcp/config.json

Patreon Integration Issues

OAuth redirect not working

  • Ensure redirect URI is exactly: http://localhost:3000/patreon/callback
  • Check no other process is using port 3000
  • Verify OAuth credentials are correctly set

No premium content showing

  • Confirm you have active Patreon subscriptions to iOS creators
  • Check status: swift-patterns-mcp patreon status
  • Re-authenticate: swift-patterns-mcp patreon setup

๐Ÿ—บ๏ธ Roadmap

Current (v1.x)

  • Core MCP server
  • Swift by Sundell RSS
  • Antoine van der Lee RSS
  • Nil Coalescing RSS
  • Patreon OAuth
  • Point-Free GitHub
  • Advanced filtering

Future (v2.x)

  • Additional premium sources
  • More free sources
  • Code validation

๐Ÿค Contributing

We welcome contributions! See our contributing guidelines.

๐Ÿ“„ License

MIT License - Copyright (c) 2026 Lasha Efremidze

๐Ÿ™ Credits

Created by Lasha Efremidze

Content Sources

Built with Model Context Protocol

Made with โค๏ธ for the Swift community

โญ Star this repo โ€ข ๐Ÿ› Report Bug โ€ข โœจ Request Feature

Related Servers