Skip to content

About

MCP server in Swift for Apple developer documentation: SwiftUI, AppKit, UIKit, the Human Interface Guidelines, and WWDC sessions

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

apple-docs-mcp

An MCP server, written in Swift, for Apple developer documentation: SwiftUI, AppKit, UIKit, Foundation, SwiftData, the Human Interface Guidelines, and every other framework on developer.apple.com. Pages come back as clean Markdown.

Tools

Tool What it does
search_docs Full-text search of developer.apple.com: symbols, articles, sample code, and WWDC videos. Filters: framework (also adds exact symbol-name matches from that framework's index), type (documentation, sample_code, video), and platform (for example "macOS 14").
get_doc Fetches a page as Markdown: declaration, availability, overview, parameters, code samples, topics, relationships, and sample code download links. Accepts a URL, a path (swiftui/view), a doc:// id, or a dotted name (AppKit.NSWindow). Options: language: "objc", topics (compact, full, none), section (for example "Overview" or a Topics group like "Handling Mouse Events"), hide_deprecated, and offset/max_chars for paging through long pages.
browse_framework Searches or outlines a framework's whole symbol tree, for example every NSTableView* in AppKit. Works for the Human Interface Guidelines ("HIG"). Filters: query, kind, path, depth, language, hide_deprecated, hide_beta.
get_video Fetches a WWDC session: description, chapter summaries, and code snippet titles by default. Use include: "code" for the code, "transcript" for the timestamped transcript, or "all". Accepts a URL or an id like wwdc2025-256.
list_frameworks Lists all of Apple's documented technologies.

Every tool returns Markdown for the model plus structured content that matches its declared outputSchema, for clients that use it.

Resources

Pages can also be attached as MCP resources:

URI Content
apple-docs://doc/{path} A documentation page, e.g. apple-docs://doc/swiftui/navigationstack. Add ?language=objc for Objective-C.
apple-docs://video/{id} A WWDC session, e.g. apple-docs://video/wwdc2025-256. Add ?include=transcript, code, or all.
apple-docs://framework/{name} A framework's table of contents, e.g. apple-docs://framework/appkit or apple-docs://framework/hig.

developer.apple.com URLs work as resource URIs too. The server lists the SwiftUI, AppKit, UIKit, Foundation, SwiftData, Observation, Swift, and HIG landing pages as ready-made resources.

Install

Requires macOS 13 or later and Swift 6 (Xcode or the Command Line Tools).

git clone https://github.com/zmscode/apple-docs-mcp.git
cd apple-docs-mcp
make install

This builds a release binary and installs it to ~/.local/bin/apple-docs-mcp. Set PREFIX to install somewhere else. Run it again after any change. Then restart Claude Desktop (⌘Q) and start a new Claude Code session to pick up the update.

Claude Code

claude mcp add --scope user apple-docs -- ~/.local/bin/apple-docs-mcp

Claude Desktop or another client

{
  "mcpServers": {
    "apple-docs": { "command": "/Users/you/.local/bin/apple-docs-mcp" }
  }
}

For Claude Desktop, this goes in ~/Library/Application Support/Claude/claude_desktop_config.json.

Development

Command What it does
make test Unit and end-to-end tests against saved fixtures. The first run downloads the fixtures and records the snapshots; after that, no network is needed.
make test-live Checks the real developer.apple.com, to catch format changes the fixtures can't.
make fixtures Re-downloads the fixtures. Follow with make snapshots and review the snapshot diff, which shows how Apple's format changed.
make snapshots Re-records the Markdown snapshots in Tests/AppleDocsKitTests/Fixtures/Snapshots after an intentional rendering change.

The fixtures are copies of Apple's pages, so they aren't checked in. Snapshots are rendered from them, so they're recorded locally too: they catch changes from your own edits, and from Apple's format after a make fixtures.

Use make test rather than plain swift test. With the Command Line Tools (no Xcode), SwiftPM passes the testing macro plugin path in a form the compiler can't use, so incremental test builds fail with "plugin for module 'TestingMacros' not found". The Makefile works around it.

The code lives in the AppleDocsKit library. Sources/AppleDocsMCP/main.swift just starts the server.

File Contents
Server.swift Server setup, plus resources
Tools.swift Tool definitions, search_docs, get_doc, list_frameworks, and pagination
Browse.swift browse_framework, and loading framework trees
Videos.swift get_video, and parsing video pages
Renderer.swift Converts DocC JSON to Markdown, and applies Objective-C variants
DocsClient.swift Networking, retries, caching, and search stream parsing
Output.swift Structured output types and their JSON Schemas

Configuration

Environment variable Purpose
APPLE_DOCS_SEARCH_URL Overrides the search endpoint if Apple moves it. The current value is in the SEARCH_CONFIG script on developer.apple.com/search.

How it works

  • Pages are fetched as DocC render JSON from developer.apple.com/tutorials/data/<path>.json and converted to Markdown.
  • Framework trees come from developer.apple.com/tutorials/data/index/<framework>. Content without an index, like the Human Interface Guidelines, is outlined by following topic sections from its landing page.
  • Objective-C pages are produced by applying the page's variantOverrides patches.
  • Video pages are HTML only, so get_video depends on the page's class names (supplement summary, transcript-content, and so on). make test-live will flag it if Apple redesigns them.
  • Search uses the same backend as developer.apple.com/search. Apple doesn't document this endpoint, so it could change. If it fails, search_docs falls back to title matches from framework symbol lists (the named framework, or SwiftUI, AppKit, UIKit, and Foundation), and says so in its output.
  • Requests time out after 20 seconds. Timeouts, dropped connections, 429s, and 5xx responses are retried with backoff. Concurrent requests for the same URL share one download.
  • Responses are cached in memory for 6 hours, up to 48 MB in total, evicting the least recently used first.

License

MIT. This project isn't affiliated with Apple; documentation content is fetched from developer.apple.com at run time and belongs to Apple.

About

MCP server in Swift for Apple developer documentation: SwiftUI, AppKit, UIKit, the Human Interface Guidelines, and WWDC sessions

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages