Skip to main content
Glama
mishafyi

Apple Docs 2.0 MCP

English · 日本語 · 한국어 · 简体中文

Apple Docs 2.0 MCP

One MCP for Apple's developer documentation, design guidelines and WWDC sessions.

Building your next iOS app with an agent? Let it read Apple's own docs first: fewer rewrites, fewer interruptions.

npm version MCP tools Node.js MCP Registry skills.sh MIT license

Quick Start · What's New · Installation · Usage · Tools · Architecture · Development

npx -y apple-docs-2.0-mcp


Apple Developer Documentation for AI assistants, through the Model Context Protocol: API reference, articles, sample code, tutorials, the Human Interface Guidelines, App Store Connect Help, the web-service APIs (App Store Connect API, App Store Server API and others) and 1,700 WWDC sessions with their transcripts and code, in Claude, Cursor, VS Code or any MCP client.

Apple Docs 2.0 MCP is a fork of Apple Docs MCP by kimsungwhee, improved with additions, fixes and a new tool.

🚀 Quick Start

Add this to your Claude Desktop configuration:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "apple-docs": {
      "command": "npx",
      "args": ["-y", "apple-docs-2.0-mcp"]
    }
  }
}

Note: If you encounter issues with an old version being used, add @latest to force the latest version:

"args": ["-y", "apple-docs-2.0-mcp@latest"]

Restart Claude Desktop and start asking about Apple APIs!

Claude Code

claude mcp add apple-docs -- npx -y apple-docs-2.0-mcp

Ask your agent

Look up NavigationStack in Apple's docs, then show me the WWDC code that uses it.

Related MCP server: Apple RAG MCP

🆕 What's New in 2.0

Apple Docs 2.0 MCP keeps everything Apple Docs MCP 1.0.26 does and fixes what stopped working or came back incomplete, so your assistant answers from Apple's own documentation instead of guessing.

🔍 Search that returns results

search_apple_docs is fixed: it now uses the same search service Apple's website uses, so your assistant gets the results you would see on developer.apple.com: API reference, articles, sample code, design guidelines, App Store Connect Help and WWDC videos. In the original, searches come back empty since Apple changed its search page.

Ask about an API, a design guideline or an App Store process, and the assistant searches first, then reads the pages it finds.

🗺️ Look up any page by name

A new tool, search_docs_map, finds any of 336,723 pages by name, or part of one, offline:

  • API symbols: types, methods, properties, enum cases, macros

  • articles and sample code

  • Info.plist and entitlement keys

  • web-service endpoints, such as the App Store Connect API's

  • Human Interface Guidelines and App Store Connect Help pages

Use it when you already know a name, from code or an error message, to open its page directly.

📄 Complete documentation pages

Pages come through whole, as on Apple's site: every method and property with its full signature (var view: UIView!, not just view), what a type inherits from and conforms to, related APIs, and the OS versions that support it. 2.0 also reads the Human Interface Guidelines, tutorials, App Store Connect Help, and App Store Connect API endpoints with their parameters and responses.

Ask about any API, guideline or App Store Connect topic, and the assistant reads the full page before it answers or writes code.

🎥 WWDC 2014–2026, with code

1,700 sessions are built in, WWDC26 included, and work offline: transcripts for 1,416 of them, each paragraph with the time it starts, chapters for 480, and code samples for 715, each sample with the time it appears in the video. Sessions are filed under the same topics as on Apple's website.

Ask how a new API works, and the assistant can quote the WWDC session that introduced it, with its code.

📋 Complete framework lists

The original's technology list stopped after 200 entries, so whole categories (Graphics and Games, Media, System, Web) never appeared, and its symbol search mixed in headings with broken links. 2.0 lists everything, marks frameworks in beta, and finds frameworks by subject: "Machine learning" returns Core ML, Create ML, Foundation Models, Vision and more.

Ask which frameworks fit a task, such as machine learning or audio, and the assistant compares the full list.

🛠️ Built to keep working

Up-to-date dependencies, requests that look like a normal browser's and wait their turn (Apple returns empty searches when they come too fast), automatic retries when a request fails, and 207 automated tests. All 63 usage examples in the original's README run without errors.

Nothing to set up: no API key or account.

✨ Features

  • 🔍 Search: Apple's documentation, design guidelines, sample code, App Store Connect Help and WWDC sessions in one search, or one of them alone

  • 🗺️ Docs map: find any page by its title, even a method or property name, without a network request

  • 📚 Documentation pages: Swift and Objective-C APIs, articles, tutorials and web-service references as Markdown

  • 🎨 Human Interface Guidelines: every HIG page, searchable and readable

  • 🏪 App Store Connect Help: product page fields, review, TestFlight, pricing

  • 🔧 Framework symbols: browse a framework's classes, structs, protocols and members by wildcard

  • 🔗 API relationships: related, similar and referenced APIs, and replacements for deprecated ones

  • 📊 Platform compatibility: the version that introduced and deprecated an API on each platform

  • 📋 Technology catalog: every Apple framework and technology by category, beta ones marked

  • 📰 Documentation updates: release notes, framework updates and WWDC "What's new" pages

  • 🎯 Technology overviews: Apple's guides to app design, games, AI and machine learning, data and more

  • 💻 Sample code: every sample project, ranked by Apple's search, and the Sample Code Library by framework or section, with summaries and Download links

  • 🎥 WWDC library: 1,700 sessions from 2014 to 2026 with transcripts, timed code examples, resources and related sessions, offline

📦 Installation

claude mcp add apple-docs -- npx -y apple-docs-2.0-mcp

📖 Claude Code MCP docs

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "apple-docs": {
      "command": "npx",
      "args": ["-y", "apple-docs-2.0-mcp"]
    }
  }
}

📖 Cursor MCP docs

Add to .mcp.json at the root of your workspace, VS Code's portable format:

{
  "mcpServers": {
    "apple-docs": {
      "command": "npx",
      "args": ["-y", "apple-docs-2.0-mcp"]
    }
  }
}

📖 VS Code MCP docs

Add to your Zed settings.json:

{
  "context_servers": {
    "apple-docs": {
      "command": "npx",
      "args": ["-y", "apple-docs-2.0-mcp"],
      "env": {}
    }
  }
}

📖 Zed MCP docs

💬 Usage Examples

"Search for SwiftUI animations"
"Find withAnimation API documentation"
"Search the Human Interface Guidelines for tab bars"
"Search App Store Connect Help for TestFlight external testers"
"Find sample code for Core Data"

🗺️ Docs Map

"Find the page for accessibilityInputLabels"
"Which SwiftUI pages have gauge in their title?"
"Find the App Store Connect API endpoint to create an auto-renewable subscription"

📚 Documentation Access

"Get detailed information about the SwiftUI framework"
"Show me withAnimation API with related APIs"
"Show me NSManagedObjectContext documentation"
"Read the Human Interface Guidelines page on tab bars"
"Show the steps of the SwiftUI tutorial"

🔧 Framework Exploration

"Show me SwiftUI views"
"List all UIKit delegate protocols"
"Get WeatherKit API hierarchy"
"Explore Core ML model loading APIs"

🔗 API Discovery

"Find APIs related to UIViewController"
"Discover alternatives to UIAlertView"
"Get all references from SwiftData documentation"
"Get platform compatibility for SwiftData"

📋 Technologies, Updates and Overviews

"What machine learning frameworks are available?"
"Which technologies are in beta?"
"What's new in SwiftUI?"
"Show me release notes for Xcode"
"Get data management technology overviews"

💻 Sample Code

"Show SwiftUI sample code projects"
"Find sample code for machine learning"
"Get the Food Truck sample"

🎥 WWDC

"Search WWDC videos about SwiftUI"
"Find WWDC sessions on machine learning"
"Show me WWDC 2026 videos"
"Search WWDC transcripts for async/await"
"Show me the transcript for WWDC23 Meet SwiftData"
"Get code examples from WWDC sessions that use SwiftData"
"Find sessions related to WWDC23 Meet SwiftData"
"List all WWDC topics"

🛠️ Available Tools

Tool

Returns

search_apple_docs

Apple's search results in Apple's order, each with its title, Apple's kind, framework, one-line summary and link: documentation, design guidelines, sample code, App Store Connect Help and WWDC sessions; type searches one of them, as Apple's search page filters

search_docs_map 🆕

The pages whose title contains the text, in any case, shortest titles first, each with its kind, Beta or Deprecated mark, technology, the page it sits under and link; optionally within technologies (by name or ID, every page their sidebars list) or of one kind. source: "index" reads one framework's sidebar live instead and matches a wildcard

get_apple_doc_content

One documentation page as Markdown, rendered from its JSON, in Swift or Objective-C: summary, every declaration with its overloads, overview, code, the articles that mention it, a property list key's details, Topics with each member's declaration and summary, Relationships, See Also and availability with Apple's notes; a web-service endpoint with its URL, parameters, body and responses; a tutorial with each step's code and its project files; a sample's Download; an App Store Connect Help article. view gives one part of an API's page: "related", "similar" (what to use instead, led by the pages its deprecation note names), "references" (the pages it links to, with summaries) or "availability"

list_technologies

Four of Apple's catalogs: every framework and technology with its summary, by category; the Sample Code Library, featured samples first; the Updates page's release notes and updates pages; the Technology Overviews' collections and articles. The first two name a TSV of the whole catalog

list_wwdc_videos

The WWDC sessions of a year or topic, or with the text in their title or topic names, each with its link, topics and whether it has a transcript and code; view: "years" counts each year's sessions, view: "topics" lists the topics or one topic's sessions

search_wwdc_content

The WWDC sessions whose transcripts or code contain the text, as typed, most matches first, each passage with the time it starts; view: "examples" lists the code examples that contain the text instead; names a folder of every session as text

get_wwdc_video

One WWDC session with its links and downloads, chapters, timed transcript, timed code examples and related sessions; view: "related" lists the sessions Apple relates to it, then those that share the most of its topics

The documentation tools fetch developer.apple.com; the WWDC tools read the bundled data and search_docs_map reads the docs map, both without a network request.

🏗️ Architecture

Apple-Docs-2.0-MCP/
├── src/
│   ├── index.ts                    # MCP server and its search guide
│   ├── tools/
│   │   ├── handlers.ts             # Tool registration
│   │   ├── search-api.ts           # Apple's search API
│   │   ├── search-docs-map.ts      # Docs map search
│   │   ├── doc-fetcher.ts          # Pages from Swift-DocC JSON
│   │   ├── doc-formatter.ts        # Markdown rendering
│   │   ├── help-pages.ts           # App Store Connect Help (jsdom, turndown)
│   │   ├── list-technologies.ts    # Technology catalog
│   │   ├── search-framework-symbols.ts
│   │   ├── get-related-apis.ts, find-similar-apis.ts, resolve-references-batch.ts, get-platform-compatibility.ts
│   │   ├── get-documentation-updates.ts, get-technology-overviews.ts, get-sample-code.ts
│   │   └── wwdc/                   # WWDC tools and the session, topic and year extractors
│   ├── types/                      # Generated from Swift-DocC's specs and captured responses
│   └── utils/                      # HTTP client, caches, constants, URL conversion
├── scripts/
│   ├── add-wwdc-year.ts            # Adds or refreshes a WWDC year in data/wwdc
│   ├── build-docs-map.ts           # Builds api-map/apple-docs-map.tsv
│   └── capture-responses.ts        # Captures responses to type them
├── data/wwdc/                      # The bundled WWDC sessions
├── api-map/                        # The docs map, Apple's search API (OpenAPI) and captured responses
└── tests/                          # Vitest

🌐 Requests and Caching

Every request goes through one HTTP client: fetch with a Safari's headers, at most 100 requests a minute, and searches one at a time, 15 seconds apart, as Apple answers quicker ones with no results. Each attempt has a 2-minute timeout, with up to 3 retries and backoff on network errors, timeouts and 5xx answers.

Apple's JSON is cached as Apple sends it, by URL, and shared by every tool: a page another tool just read isn't downloaded again, and requests for one URL at the same moment share one download.

Content

Cached for

Pages, catalog pages and the technologies list

30 minutes

Sidebars (framework and catalog indexes)

1 hour

The docs map, parsed

while in use; freed after 30 idle minutes

Searches

not cached

📦 WWDC Data

The WWDC sessions are bundled in data/wwdc/, so the WWDC tools work offline and without rate limits:

  • 📹 1,700 sessions from 2014 to 2026, 1,416 with transcripts, each paragraph timed (all but 6 Apple no longer lists), 715 with code examples, 480 with chapters

  • 🏷️ 19 topics, taken from Apple's topic pages

  • 💾 48 MB of JSON

npx tsx scripts/add-wwdc-year.ts <year> adds a year, or refreshes it, from Apple's pages; a session Apple no longer lists keeps its stored data.

🗺️ Docs Map

api-map/apple-docs-map.tsv lists 336,723 pages (URL, title, kind, technology, group, tree, the technology's ID, Beta or Deprecated marks, and the other technologies whose sidebars list the page) from Apple's navigator indexes, the Human Interface Guidelines and App Store Connect Help's navigation. search_docs_map keeps it in memory while in use. npx tsx scripts/build-docs-map.ts api-map/apple-docs-map.tsv rebuilds it in about 10 minutes.

🧪 Development

git clone https://github.com/mishafyi/Apple-Docs-2.0-MCP.git
cd Apple-Docs-2.0-MCP
npx pnpm@10 install
npx pnpm@10 run build          # tsc into dist/

# Run your build in Claude Code in place of the npm package
claude mcp add apple-docs -- node "$PWD/dist/index.js"

# Checks: types (server and scripts), lint and tests
npx tsc --noEmit && npx tsc -p scripts && npx eslint src scripts && npx vitest run

# Call the built server without an MCP client
npx -y @modelcontextprotocol/inspector --cli node dist/index.js --method tools/call \
  --tool-name search_apple_docs --tool-args-json '{"query":"tab bars","type":"design"}'

# Regenerate the types of Apple's JSON
npm run types:docc             # from Swift-DocC's RenderNode and RenderIndex specs
npm run types:captured         # from captured responses (quicktype)

After a build, restart or reconnect the server in your MCP client.

🙏 Credits

Apple Docs 2.0 MCP builds on Apple Docs MCP by kimsungwhee, whose tools, WWDC data and structure it started from.

🤝 Contributing

Contributions are welcome:

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/amazing-feature

  3. Commit your changes: git commit -m 'Add amazing feature'

  4. Push to the branch: git push origin feature/amazing-feature

  5. Open a Pull Request

📄 License

MIT License, as the original project: see LICENSE.

⚠️ Disclaimer

This project is not affiliated with or endorsed by Apple Inc. It reads Apple's publicly available developer documentation for educational and development purposes.

Available Tools

7 tools
get_apple_doc_contentGet Apple Doc ContentA
Read-only

Read one page of Apple's developer documentation by its URL: an API, article, sample project, tutorial, Human Interface Guidelines page, App Store Connect Help article or web-service endpoint (App Store Connect API, App Store Server API and the like). Returns the whole page as Markdown: summary, declarations, overview with its code, each member with its declaration and summary, relationships, the versions it's available in on each platform with Apple's notes, and See Also; for a sample, its Download link; for a tutorial, its steps with their code; for an endpoint, its URL, parameters and responses. Use it on a search result's link or a URL you already have; language "occ" reads an API's Objective-C version. A view answers one question about an API in less: "related" (what it inherits, conforms to and lists, with summaries), "similar" (what to use instead, led by the pages its deprecation note names), "references" (the pages it links to, with their summaries) or "availability" (the versions that introduced and deprecated it on each platform).

NameRequiredDescriptionDefault
urlYesThe page's address on developer.apple.com, under /documentation/, /design/human-interface-guidelines/, /tutorials/ or, for view "page" only, /help/app-store-connect/ ("https://developer.apple.com/documentation/swiftui/navigationstack"). Take it from a result or a link: a guessed one often doesn't exist.
viewNo"page": the whole page. The others give one part of an API's page, shorter. "related": what it inherits from and what inherits from it, the protocols it conforms to and the types that conform to it, and its See Also list, each with its one-line summary, plus the first 3 members of each Topics group. "similar": what to use instead or alongside, each with its summary: first the pages its deprecation note names, then its See Also list, then members of its Topics groups; for replacing a deprecated API. "references": the pages it links to, from its lists and inside its text, each with its summary and, for an API, its declaration, grouped by Apple's role for each ("symbol", "article", "collection"). "availability": the title, tagged Deprecated or Beta as Apple's page tags it, and each platform with the version that introduced it and, where deprecated, the version and Apple's note.page
languageNo"swift": the page in Swift; "occ": an API's Objective-C version, its declaration and members as Objective-C writes them. A page Apple writes in Swift alone has none. The views other than "page" read the Swift page.swift
searchDepthNosimilar: "shallow", the pages the deprecation note names and the See Also list, up to 5; "medium", also the first 4 members of each Topics group, up to 10; "deep", also the See Also lists of the first 3 results, up to 15.medium
filterByTypeNoreferences: keeps the linked pages of one role or kind, as Apple names them: "symbol" (APIs), "collection", "article", "sampleCode" and the like.all
maxReferencesNoreferences: most linked pages to show, not by relevance: those its lists name (Topics, Relationships, See Also) first, then those its text links to.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description carries the behavioral burden and does so: it details what each view returns, notes that 'occ' yields nothing for Swift-only pages, that non-'page' views read the Swift page, and that invented URLs usually 404. These are real operational constraints an agent could not infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return shape are front-loaded, which is good, but the body is one dense paragraph of long nested clauses that is hard to scan. Nearly every sentence carries information, yet the run-on construction and heavy enumeration of view internals cost readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and six parameters, so the description must explain the returns — and it does so per view, per page type and per language, covering everything needed to call the tool correctly and interpret its output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning on top: the decision rule for 'similar' (deprecation-note pages first, then See Also, then Topics) and the use case 'for replacing a deprecated API', plus 'occ' semantics for an API's declaration and members.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read one page of Apple's developer documentation by its URL') and enumerates the page classes it covers (API, article, sample, tutorial, HIG, ASC Help, endpoint). It also implicitly differentiates from the search/lookup siblings by being the retrieval step for a URL the agent already has.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it on a search result's link or a URL you already have' gives a clear when-to-use condition tied to the sibling search tools, and the url parameter warns that guessed URLs often don't exist. It stops short of naming search_apple_docs explicitly or stating when not to use this tool, so it is clear context rather than full routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wwdc_videoGet WWDC VideoA
Read-only

One WWDC session: its title, year and topics; its links, including the video downloads and the documentation it covers; its chapters; the full transcript, each paragraph with its time; every code example with the time it appears; and the sessions Apple lists as related. Transcripts are long: set includeTranscript to false when you need only the code or the links. view "related" lists the sessions related to it instead: those Apple lists, then, across every year, those that share the most of its topics.

NameRequiredDescriptionDefault
viewNo"session": the session itself. "related": the sessions related to it, first those Apple lists as related, then, across every year, sessions that share its topics, the most shared first; each with its year, link and topics, and whether it has a transcript and code.session
yearYesThe session's WWDC year ("2025").
limitNorelated: most sessions to show.
videoIdYesThe session's number, from its link: …/wwdc2025/10101/ is "10101".
includeCodeNosession: false leaves out the code examples.
includeTranscriptNosession: false leaves out the transcript, which runs to tens of KB.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this as a safe read, so the bar is lower; the description still adds real value by warning that transcripts are long, with includeTranscript=false as the mitigation, and by noting what the 'related' view returns across all years. It says nothing about failure modes (bad year/videoId) or response size limits for the related list beyond the schema's limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The payload enumeration is front-loaded and informative, but the final sentence re-explains the 'related' view mode almost verbatim from the schema, and the whole description is one sprawling colon-chained sentence that is harder to scan than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return contents, and it does so for both the session and related views, including the time-indexed transcript and code examples. It is complete enough to call correctly, though it omits error/empty-result behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions already explain view, limit, includeCode and includeTranscript, including the tens-of-KB transcript warning. The description's parameter text largely restates those schema strings rather than adding new semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely (one WWDC session) and enumerates exactly what comes back: title, year, topics, links/downloads, chapters, timestamped transcript, timestamped code examples, and related sessions. It also covers the alternate 'related' mode, so an agent can distinguish it from search_wwdc_content or list_wwdc_videos without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives conditional guidance for the two modes and for the expensive option ('set includeTranscript to false when you need only the code or the links'), which is exactly when-not-to-use behavior. It does not, however, state when to reach for this tool over the sibling search/list tools, so routing across tools is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_technologiesList TechnologiesA
Read-only

Browse four of Apple's catalogs. catalog "technologies": every Apple framework and technology, grouped by Apple's categories, each with its link, languages, tags and Apple's one-line summary, beta ones marked; use it to see which frameworks fit a task (category "Machine learning") or to get a framework's exact name and link. catalog "samples": Apple's Sample Code Library, each sample with its framework, sections and summary, featured ones first, then by the library's sections ("WWDC26" holds that year's); to find a sample by what it does, search_apple_docs with type "sample" ranks every sample on the site, including ones this library leaves out. catalog "updates": Apple's Updates page as links with summaries, each framework's updates page ("SwiftUI updates"), the release notes of each OS, Xcode and Safari, and each past WWDC's What's new page; use it to find what changed in a framework or a release. catalog "overviews": Apple's Technology Overviews, guides to which technologies to use for a goal (app design and UI, Liquid Glass, games, AI and machine learning and more), the collections with their summaries and the articles in each; use it to choose an approach before choosing APIs. Read any entry with get_apple_doc_content. The technologies and samples answers also name a TSV of the whole catalog, one entry a line, for a grep the parameters can't make.

NameRequiredDescriptionDefault
limitNoMost entries to show, in all; if left out, 200 technologies, 50 samples, 50 updates, 50 overview entries.
catalogNo"technologies": Apple's frameworks and technologies; "samples": Apple's Sample Code Library; "updates": Apple's Updates page; "overviews": Apple's Technology Overviews.technologies
categoryNoKeeps one part of the catalog, in any case: technologies, the ones whose category or one of whose tags contains it ("Machine learning" finds Core ML, Create ML and Vision); samples, a library section, by any part of its name ("WWDC26" lists that year's samples); updates, a section of the page, by any part of its title ("Release notes"); overviews, one collection, by its whole title or the last part of its link. Technologies, updates and overviews answer a value they lack with the ones they have.
languageNotechnologies only: keeps the technologies available in Swift ("swift") or Objective-C ("occ").
frameworkNosamples only: keeps the samples whose framework, title or link names this framework, in any spelling ("SwiftUI", "storekit", "Core ML").
technologyNoupdates only: keeps the entries whose framework, title or summary contains this name ("SwiftUI"), in any case.
includeBetaNofalse leaves out beta technologies, samples or updates.
searchQueryNosamples: words that must all appear, in any case, in a sample's title, sections, framework, link or summary ("SwiftData widget"); the list keeps the library's order. updates: keeps the entries whose title or summary contains this text, in any case. overviews: keeps the collections and articles whose title or link contains this text, in any case; a collection's summary counts too.
includeSubcategoriesNooverviews only: false lists only the collections, without their articles.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint, so the description carries the disclosure burden and does so richly: per-catalog entry fields, ordering rules (featured first, then library sections), beta marking, per-catalog default limits, and the notable extra behavior of returning a TSV of the whole catalog for grep. This is well beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with a clear 'Browse four of Apple's catalogs' opening, but at roughly 300 words it is dense and duplicates much of what the catalog enum descriptions already say. The per-catalog sentences carry usage value, yet the catalog re-descriptions do not earn their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, four-mode tool with no output schema, the description supplies the return shape per catalog, ordering, defaults, and how to continue with get_apple_doc_content. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema descriptions are themselves exhaustive (enum meanings, per-catalog filtering semantics, defaults). The description largely restates catalog purposes already documented in the schema, adding only the TSV/grep note, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the resource and scope precisely (four Apple catalogs), then names each catalog and exactly what it contains (frameworks grouped by category, sample library, updates page, technology overviews). Despite the name suggesting only technologies, an agent can tell this apart from all siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Every catalog is paired with an explicit use case ('see which frameworks fit a task', 'find what changed in a framework', 'choose an approach before choosing APIs'), and it names an alternative with its trigger condition: search_apple_docs with type 'sample' for behavioral lookup. get_apple_doc_content is cited for reading entries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_wwdc_videosList WWDC VideosA
Read-only

List WWDC sessions, every year since 2014, by year, topic or text in the title or topic names: each with its title, link, topics, and whether it has a transcript and code, newest year first. Use it to browse sessions; search_wwdc_content finds what sessions said or showed, and get_wwdc_video reads one. view "years" counts each year's sessions; view "topics" lists the WWDC topics with their IDs and session counts, or one topic's sessions.

NameRequiredDescriptionDefault
viewNo"sessions": the sessions by year, topic or text in the title or topic names. "years": each WWDC year with its number of sessions, then how many sessions in all have code and a transcript. "topics": the WWDC topics with their IDs and session counts or, with topic, one topic's sessions, newest year first.sessions
yearNosessions, and one topic's sessions: keeps one WWDC year ("2026"); left out or "all", every year.
limitNoMost sessions to show: 50 if left out, 20 of one topic's.
topicNosessions: a topic ID, as list_wwdc_videos with view "topics" lists them, keeps that topic's sessions; any other text keeps the sessions whose title or topic names contain it, in any case. topics: one topic's ID, to list its sessions.
hasCodeNosessions: true keeps the sessions with code; false, those without.
includeVideosNotopics: false shows the topic without its sessions.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description carries the rest, and it does: it discloses the returned fields per session (title, link, topics, transcript/code flags) and the sort order ("newest year first"). It also explains what each view mode counts or returns. It does not mention pagination behavior or the 200-item cap beyond what the schema states, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core operation and return shape, then routing guidance, then view-mode detail — a sensible order. It is dense but each sentence does work; the trailing view sentence overlaps noticeably with the schema's own view description, which is minor redundancy rather than waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six optional parameters, no required params, and no output schema, the description covers the essentials: what is listed, what fields come back, the ordering, the filter axes, and how it differs from siblings. The three view modes are all touched on. Only pagination/truncation behavior around the limit cap is left implicit, which keeps it just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented; the description's restatement of "years" and "topics" views largely duplicates the schema's view description. It adds the framing that these are alternative browse modes rather than filters, but contributes no syntax, default, or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List WWDC sessions") plus scope ("every year since 2014") and the facets it filters by (year, topic, title/topic text). It explicitly names the two nearest siblings — search_wwdc_content and get_wwdc_video — and what each does instead, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case ("Use it to browse sessions") and contrasts it against both alternatives with their distinguishing behavior: search_wwdc_content "finds what sessions said or showed" and get_wwdc_video "reads one." The view-mode semantics ("years" counts, "topics" lists topics with IDs) further tell the agent which variant to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_apple_docsSearch Apple DocsA
Read-only

Search Apple's developer site the way developer.apple.com/search does, best match first: API reference, articles, sample code, the Human Interface Guidelines, App Store Connect Help and WWDC sessions. Use it to find pages by what they do or are about ("SwiftUI haptic feedback", "TestFlight external testers"); for a name you already know, search_docs_map answers at once. Returns links, each with its title, framework, kind and one-line summary; read a page with get_apple_doc_content, a session with get_wwdc_video. For sample code, type "sample" ranks every sample project on the site, including ones Apple's Sample Code Library doesn't list; for WWDC sessions, type "video". Searches run one at a time, 15 s apart, so several in a row are slow.

NameRequiredDescriptionDefault
typeNoLeave out to search everything, as Apple's search page does with no filter; WWDC sessions show only where Apple mixes them in. "documentation": API reference and articles; "design": the Human Interface Guidelines; "sample": sample code projects; "help": App Store Connect Help (product page, review, TestFlight, pricing); "video": WWDC sessions alone.
queryYesWhat you're looking for, in words or by name: "SwiftUI haptic feedback", "NSPredicate", "TestFlight external testers". Every word counts. A full list doesn't mean a match: when little fits, the list fills up with weaker results.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, and the description goes well beyond that: it discloses result ordering ('best match first'), the return shape (links with title, framework, kind, one-line summary), the ranking caveat that a full list means weak matches, and a real constraint (searches run one at a time, 15 s apart). That is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the sibling distinction, then usage, then return format, then the rate limit. Dense and parenthetical-heavy ('the way developer.apple.com/search does', repeated quoted examples), but nearly every clause carries routing or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing exactly what comes back and how to consume it via get_apple_doc_content/get_wwdc_video. Combined with type semantics, ranking caveats, and the rate limit, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains that omitting type mirrors Apple's unfiltered search, that 'sample' surfaces projects Apple's own library omits, and how word count affects match quality. It stops short of restating query syntax details fully, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search Apple's developer site'), enumerates the content classes it covers, and explicitly distinguishes itself from search_docs_map ('for a name you already know'). An agent can route between the two search tools without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives when-to-use with example queries, names the alternative for known-name lookups, and points to get_apple_doc_content and get_wwdc_video for consuming results. The per-type guidance ('for sample code, type "sample"', 'for WWDC sessions, type "video"') is explicit routing advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_docs_mapSearch Docs MapA
Read-only

Find any page of Apple's documentation by its title, at once: API symbols (types, methods, properties, enum cases, macros), articles, samples, web-service endpoints, Info.plist and entitlement keys, Human Interface Guidelines and App Store Connect Help pages. Use it when you know a name or part of one, from code, an error or another page. Returns each match's title, kind, Beta or Deprecated mark, technology, the page it sits under (which tells same-named members apart) and link, shortest titles first; read one with get_apple_doc_content. It matches titles only, so to search by what something does, use search_apple_docs. Pages Apple added after the map's date, given in each answer, are missing: source "index" reads one framework's sidebar live and matches a wildcard ("*View" structs in SwiftUI, "*Delegate" protocols in UIKit), to see a family of APIs or what's newer than the map, without summaries.

NameRequiredDescriptionDefault
kindNoKeeps one kind of page, as the results name it ("struct", "method", "case", "protocol", "article"); an unknown one is answered with the kinds there are.
limitNoMost results: from the map, the shortest titles first (10 if left out); from an index, in its order (50).
queryYesmap: text the title contains, in any case and as typed, without wildcards: a name ("accessibilityInputLabels(_:)"), part of one ("inputlabels") or a word ("gauge"). index: a wildcard for the whole name, in any case: "*View" ends in View, "UI*" starts with UI, "*feedback*" contains it, "registerForTraitChanges*" finds a method by its name, "*" takes every one.
sourceNo"map": the docs map on disk, every technology at once. "index": one framework's sidebar, read live from Apple's site, for pages newer than the map or a family of names by wildcard; technology names the framework.map
technologyNomap: keeps only the pages these technologies' sidebars list (WebKit's WebView is in SwiftUI's), by the names the results show ("SwiftUI", "Human Interface Guidelines") or IDs ("swiftui"), in any case. index: the one framework, by its name in any case and spacing ("Foundation Models") or its ID ("foundationmodels").

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description is free to add the behavioral detail it does: result fields (title, kind, Beta/Deprecated mark, technology, parent page, link), ordering (shortest titles first), and the important staleness caveat that pages added after the map's date are missing. These are genuinely useful traits beyond the annotation, though it stops short of noting rate limits or index-source auth/availability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the query/source distinction are front-loaded and every clause carries information, but the single dense block packs multiple ideas into run-on sentences, making the index/wildcard behavior harder to parse than it needs to be. Slightly more structure would improve scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so, describing match fields and ordering. It also covers the two source modes, staleness, and the follow-up read tool, so an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema does not: plain substring matching on the map versus whole-name wildcards for the index source, and how technology selection narrows sidebars. This meaningfully helps an agent choose values across the source/query/technology combination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Find) and resource (any page of Apple's documentation) and enumerates the covered page kinds precisely. It is immediately distinguishable from siblings like search_apple_docs and get_apple_doc_content, which it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ("when you know a name or part of one, from code, an error or another page") and when not to ("It matches titles only, so to search by what something does, use search_apple_docs"). It also routes to get_apple_doc_content for reading a match and explains the index source for wildcard/family browsing, giving the agent clear alternative-selection logic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_wwdc_contentSearch WWDC ContentA
Read-only

Search what WWDC sessions said and showed, every year since 2014: the full text of their transcripts and their code. Returns the sessions whose transcript or code contains the query, most matches first, each with its count of matches and its first matching passages and code excerpts, with the time each comes up. Use it to find the sessions that cover an API or a technique; read one with get_wwdc_video. view "examples" lists the code itself instead: each example that contains query (pass the type or attribute the code uses, "LanguageModelSession", "@Generable"), with its session, year and time, newest year first. The answer also names a folder of every session as text, for a grep across sessions.

NameRequiredDescriptionDefault
viewNo"sessions": the matching sessions, most matches first, each with its count of matches and up to 3 passages or code excerpts, each with its time. "examples": the code examples that contain query, each with its session, year and the time it appears, newest year first.sessions
yearNoKeeps one WWDC year ("2025"); left out, every year.
limitNoMost sessions to show, 20 if left out; examples: most examples, 30.
queryYessessions: text a transcript paragraph or a line of code must contain, as typed, in any case ("@Observable", "Vision Pro"; "async await" finds the two words side by side). examples: text the code must contain, in any case: a type, attribute, method or framework name ("LanguageModelSession", "@Generable"); session code rarely shows its imports, so a framework's name finds fewer.
topicNoexamples: a topic ID, as list_wwdc_videos with view "topics" lists them, keeps that topic's sessions; any other text keeps the sessions whose title or topic names contain it, in any case.
searchInNosessions: search the transcripts, the code, or both.both

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint available and no output schema, the description carries the return-shape burden and does so well: ordering ('most matches first', 'newest year first'), per-result contents (match count, first passages and code excerpts, timestamps), and an extra artifact (a folder of every session as text for grepping). This is behavioral context well beyond what the annotation declares.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first clause and every sentence carries information about behavior or the two view modes. The dense, quote-heavy middle section is somewhat rambling and harder to parse than necessary, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter read-only search with no output schema, the description covers corpus scope, both view modes, ranking, result contents, and the sibling to use for follow-up reads. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter is documented there, so the baseline is 3. The prose largely restates the schema (view modes, query semantics, type/attribute hints for examples), adding little net-new meaning beyond the structured field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and a precisely bounded resource (WWDC session transcripts and code, 2014 onward), and implicitly separates itself from get_wwdc_video and the apple-docs siblings. An agent knows exactly what corpus is being searched without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context ('Use it to find the sessions that cover an API or a technique') and routes to get_wwdc_video for reading a single session, plus explains when to prefer the 'examples' view over the default. It does not, however, distinguish this tool from search_apple_docs or say when not to use it, so it falls short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv0.1.1
    • Removedbrowse_wwdc_topics
    • Removedfind_related_wwdc_videos
    • Removedfind_similar_apis
    • Changedget_apple_doc_content10 fields changed
      • addedInput schema / properties / filterByType
        Added value: +{
        +  "default": "all",
        +  "description": "references: keeps the linked pages of one role or kind, as Apple names them: \"symbol\" (APIs), \"collection\", \"article\", \"sampleCode\" and the like.",
        +  "enum": [
        +    "all",
        +    "symbol",
        +    "containerSymbol",
        +    "restRequestSymbol",
        +    "dictionarySymbol",
        +    "pseudoSymbol",
        +    "pseudoCollection",
        +    "collection",
        +    "collectionGroup",
        +    "article",
        +    "sampleCode",
        +    "overview",
        +    "table",
        +    "codeListing",
        +    "link",
        +    "project",
        +    "subsection",
        +    "task",
        +    "section",
        +    "root"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / includePlatformAnalysis
        Removed value: -{
        -  "default": false,
        -  "description": "Analyze platform availability and version requirements. Essential for cross-platform development. Default: false",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / includeReferences
        Removed value: -{
        -  "default": false,
        -  "description": "Resolve and include all referenced types and APIs. Helps understand dependencies. Default: false",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / includeRelatedApis
        Removed value: -{
        -  "default": false,
        -  "description": "Include inheritance hierarchy and protocol conformances. Useful for understanding API relationships. Default: false",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / includeSimilarApis
        Removed value: -{
        -  "default": false,
        -  "description": "Discover APIs with similar functionality. Great for finding alternatives. Default: false",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "swift",
        +  "description": "\"swift\": the page in Swift; \"occ\": an API's Objective-C version, its declaration and members as Objective-C writes them. A page Apple writes in Swift alone has none. The views other than \"page\" read the Swift page.",
        +  "enum": [
        +    "swift",
        +    "occ"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / maxReferences
        Added value: +{
        +  "default": 20,
        +  "description": "references: most linked pages to show, not by relevance: those its lists name (Topics, Relationships, See Also) first, then those its text links to.",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / searchDepth
        Added value: +{
        +  "default": "medium",
        +  "description": "similar: \"shallow\", the pages the deprecation note names and the See Also list, up to 5; \"medium\", also the first 4 members of each Topics group, up to 10; \"deep\", also the See Also lists of the first 3 results, up to 15.",
        +  "enum": [
        +    "shallow",
        +    "medium",
        +    "deep"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"Full URL of the Apple Developer Documentation page. Must start with https://developer.apple.com/documentation/, https://developer.apple.com/design/human-interface-guidelines/, https://developer.apple.com/tutorials/ or https://developer.apple.com/help/app-store-connect/. Example: \"https://developer.apple.com/documentation/uikit/uiviewcontroller\""New value: +"The page's address on developer.apple.com, under /documentation/, /design/human-interface-guidelines/, /tutorials/ or, for view \"page\" only, /help/app-store-connect/ (\"https://developer.apple.com/documentation/swiftui/navigationstack\"). Take it from a result or a link: a guessed one often doesn't exist."
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "page",
        +  "description": "\"page\": the whole page. The others give one part of an API's page, shorter. \"related\": what it inherits from and what inherits from it, the protocols it conforms to and the types that conform to it, and its See Also list, each with its one-line summary, plus the first 3 members of each Topics group. \"similar\": what to use instead or alongside, each with its summary: first the pages its deprecation note names, then its See Also list, then members of its Topics groups; for replacing a deprecated API. \"references\": the pages it links to, from its lists and inside its text, each with its summary and, for an API, its declaration, grouped by Apple's role for each (\"symbol\", \"article\", \"collection\"). \"availability\": the title, tagged Deprecated or Beta as Apple's page tags it, and each platform with the version that introduced it and, where deprecated, the version and Apple's note.",
        +  "enum": [
        +    "page",
        +    "related",
        +    "similar",
        +    "references",
        +    "availability"
        +  ],
        +  "type": "string"
        +}
    • Removedget_documentation_updates
    • Removedget_platform_compatibility
    • Removedget_related_apis
    • Removedget_sample_code
    • Removedget_technology_overviews
    • Removedget_wwdc_code_examples
    • Changedget_wwdc_video6 fields changed
      • changedInput schema / properties / includeCode / description
        Previous value: -"Include all code examples from the session. Default: true"New value: +"session: false leaves out the code examples."
      • changedInput schema / properties / includeTranscript / description
        Previous value: -"Include the full transcript, as plain text without timestamps. Default: true"New value: +"session: false leaves out the transcript, which runs to tens of KB."
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 15,
        +  "description": "related: most sessions to show.",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • changedInput schema / properties / videoId / description
        Previous value: -"Session ID. Example: \"10101\" for keynote, \"238\" for session 238."New value: +"The session's number, from its link: …/wwdc2025/10101/ is \"10101\"."
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "session",
        +  "description": "\"session\": the session itself. \"related\": the sessions related to it, first those Apple lists as related, then, across every year, sessions that share its topics, the most shared first; each with its year, link and topics, and whether it has a transcript and code.",
        +  "enum": [
        +    "session",
        +    "related"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / year / description
        Previous value: -"WWDC year. Example: \"2025\""New value: +"The session's WWDC year (\"2025\")."
    • Changedlist_technologies10 fields changed
      • addedInput schema / properties / catalog
        Added value: +{
        +  "default": "technologies",
        +  "description": "\"technologies\": Apple's frameworks and technologies; \"samples\": Apple's Sample Code Library; \"updates\": Apple's Updates page; \"overviews\": Apple's Technology Overviews.",
        +  "enum": [
        +    "technologies",
        +    "samples",
        +    "updates",
        +    "overviews"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / category / description
        Previous value: -"Keeps the categories whose name contains this or, failing that, the technologies with a tag that contains it (the Categories line of each), in any case: \"Machine learning\" finds Core ML, Create ML and Vision. Popular: \"App frameworks\" (SwiftUI, UIKit), \"Graphics and games\" (Metal, SpriteKit), \"App services\" (CloudKit, StoreKit), \"Media\" (AVFoundation), \"System\" (Foundation). Leave empty to see all categories."New value: +"Keeps one part of the catalog, in any case: technologies, the ones whose category or one of whose tags contains it (\"Machine learning\" finds Core ML, Create ML and Vision); samples, a library section, by any part of its name (\"WWDC26\" lists that year's samples); updates, a section of the page, by any part of its title (\"Release notes\"); overviews, one collection, by its whole title or the last part of its link. Technologies, updates and overviews answer a value they lack with the ones they have."
      • addedInput schema / properties / framework
        Added value: +{
        +  "description": "samples only: keeps the samples whose framework, title or link names this framework, in any spelling (\"SwiftUI\", \"storekit\", \"Core ML\").",
        +  "type": "string"
        +}
      • changedInput schema / properties / includeBeta / description
        Previous value: -"Include beta/preview technologies. Set to false to see only stable frameworks. Default: true"New value: +"false leaves out beta technologies, samples or updates."
      • addedInput schema / properties / includeSubcategories
        Added value: +{
        +  "default": true,
        +  "description": "overviews only: false lists only the collections, without their articles.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / language / description
        Previous value: -"Filter by language support. \"swift\" for Swift-compatible frameworks, \"occ\" for Objective-C. Leave empty for all."New value: +"technologies only: keeps the technologies available in Swift (\"swift\") or Objective-C (\"occ\")."
      • removedInput schema / properties / limit / default
        Removed value: -200
      • changedInput schema / properties / limit / description
        Previous value: -"Max results per category. Useful for quick overviews. Default: 200"New value: +"Most entries to show, in all; if left out, 200 technologies, 50 samples, 50 updates, 50 overview entries."
      • addedInput schema / properties / searchQuery
        Added value: +{
        +  "description": "samples: words that must all appear, in any case, in a sample's title, sections, framework, link or summary (\"SwiftData widget\"); the list keeps the library's order. updates: keeps the entries whose title or summary contains this text, in any case. overviews: keeps the collections and articles whose title or link contains this text, in any case; a collection's summary counts too.",
        +  "type": "string"
        +}
      • addedInput schema / properties / technology
        Added value: +{
        +  "description": "updates only: keeps the entries whose framework, title or summary contains this name (\"SwiftUI\"), in any case.",
        +  "type": "string"
        +}
    • Changedlist_wwdc_videos7 fields changed
      • changedInput schema / properties / hasCode / description
        Previous value: -"Filter by code availability. true = sessions with code, false = without code. Leave empty for all."New value: +"sessions: true keeps the sessions with code; false, those without."
      • addedInput schema / properties / includeVideos
        Added value: +{
        +  "default": true,
        +  "description": "topics: false shows the topic without its sessions.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / limit / default
        Removed value: -50
      • changedInput schema / properties / limit / description
        Previous value: -"Max videos to show (default: 50). Videos include title, duration, and content indicators."New value: +"Most sessions to show: 50 if left out, 20 of one topic's."
      • changedInput schema / properties / topic / description
        Previous value: -"A topic ID keeps that topic's sessions: \"accessibility-inclusion\", \"app-services\", \"app-store-distribution-marketing\", \"audio-video\", \"business-education\", \"design\", \"developer-tools\", \"essentials\", \"graphics-games\", \"health-fitness\", \"machine-learning-ai\", \"maps-location\", \"photos-camera\", \"privacy-security\", \"safari-web\", \"spatial-computing\", \"swift\", \"swiftui-ui-frameworks\", \"system-services\". Any other text keeps the sessions whose title or topic names contain it."New value: +"sessions: a topic ID, as list_wwdc_videos with view \"topics\" lists them, keeps that topic's sessions; any other text keeps the sessions whose title or topic names contain it, in any case. topics: one topic's ID, to list its sessions."
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "sessions",
        +  "description": "\"sessions\": the sessions by year, topic or text in the title or topic names. \"years\": each WWDC year with its number of sessions, then how many sessions in all have code and a transcript. \"topics\": the WWDC topics with their IDs and session counts or, with topic, one topic's sessions, newest year first.",
        +  "enum": [
        +    "sessions",
        +    "years",
        +    "topics"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / year / description
        Previous value: -"WWDC year (\"2025\", \"2024\", etc.) or \"all\"; list_wwdc_years lists the years held. Example: \"2025\" for latest."New value: +"sessions, and one topic's sessions: keeps one WWDC year (\"2026\"); left out or \"all\", every year."
    • Removedlist_wwdc_years
    • Removedresolve_references_batch
    • Changedsearch_apple_docs5 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Search query for Apple Developer Documentation. Tips: Use specific API names (e.g., \"UIViewController\"), framework names (e.g., \"SwiftUI\"), or technical terms. Avoid generic terms like \"how to\" or \"tutorial\". Examples: \"NSPredicate\", \"SwiftUI List\", \"Core Data migration\", \"URLSession authentication\"."New value: +"What you're looking for, in words or by name: \"SwiftUI haptic feedback\", \"NSPredicate\", \"TestFlight external testers\". Every word counts. A full list doesn't mean a match: when little fits, the list fills up with weaker results."
      • addedInput schema / properties / query / minLength
        Added value: +1
      • removedInput schema / properties / type / default
        Removed value: -"all"
      • changedInput schema / properties / type / description
        Previous value: -"Type of content to filter. \"all\": documentation, design guidelines, sample code projects, and WWDC sessions; \"documentation\": API references and guides; \"design\": the Human Interface Guidelines; \"sample\": sample code projects; \"help\": App Store Connect Help (product page fields, review, TestFlight, pricing). Default: \"all\"."New value: +"Leave out to search everything, as Apple's search page does with no filter; WWDC sessions show only where Apple mixes them in. \"documentation\": API reference and articles; \"design\": the Human Interface Guidelines; \"sample\": sample code projects; \"help\": App Store Connect Help (product page, review, TestFlight, pricing); \"video\": WWDC sessions alone."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "all",
        -  "documentation",
        -  "design",
        -  "sample",
        -  "help"
        -]New value: +[
        +  "documentation",
        +  "design",
        +  "sample",
        +  "help",
        +  "video"
        +]
    • Changedsearch_docs_map8 fields changed
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "Keeps one kind of page, as the results name it (\"struct\", \"method\", \"case\", \"protocol\", \"article\"); an unknown one is answered with the kinds there are.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / limit / default
        Removed value: -10
      • changedInput schema / properties / limit / description
        Previous value: -"Max results, shortest titles first (default: 10)."New value: +"Most results: from the map, the shortest titles first (10 if left out); from an index, in its order (50)."
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +200
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / query / description
        Previous value: -"Text the title contains, in any case and taken as typed: a name (\"accessibilityInputLabels(_:)\"), part of one (\"inputlabels\") or a word (\"gauge\")."New value: +"map: text the title contains, in any case and as typed, without wildcards: a name (\"accessibilityInputLabels(_:)\"), part of one (\"inputlabels\") or a word (\"gauge\"). index: a wildcard for the whole name, in any case: \"*View\" ends in View, \"UI*\" starts with UI, \"*feedback*\" contains it, \"registerForTraitChanges*\" finds a method by its name, \"*\" takes every one."
      • addedInput schema / properties / source
        Added value: +{
        +  "default": "map",
        +  "description": "\"map\": the docs map on disk, every technology at once. \"index\": one framework's sidebar, read live from Apple's site, for pages newer than the map or a family of names by wildcard; technology names the framework.",
        +  "enum": [
        +    "map",
        +    "index"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / technology / description
        Previous value: -"Keep only the pages of these technologies, by the name the results show (\"SwiftUI\", \"UIKit\", \"Human Interface Guidelines\"), in any case."New value: +"map: keeps only the pages these technologies' sidebars list (WebKit's WebView is in SwiftUI's), by the names the results show (\"SwiftUI\", \"Human Interface Guidelines\") or IDs (\"swiftui\"), in any case. index: the one framework, by its name in any case and spacing (\"Foundation Models\") or its ID (\"foundationmodels\")."
    • Removedsearch_framework_symbols
    • Changedsearch_wwdc_content8 fields changed
      • removedInput schema / properties / language
        Removed value: -{
        -  "description": "Code language filter (\"swift\", \"objc\", \"javascript\"). Only for code search.",
        -  "type": "string"
        -}
      • removedInput schema / properties / limit / default
        Removed value: -20
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default: 20). Results include context snippets."New value: +"Most sessions to show, 20 if left out; examples: most examples, 30."
      • changedInput schema / properties / query / description
        Previous value: -"Search terms. Examples: \"async await\", \"@Observable\", \"Vision Pro\", \"performance optimization\"."New value: +"sessions: text a transcript paragraph or a line of code must contain, as typed, in any case (\"@Observable\", \"Vision Pro\"; \"async await\" finds the two words side by side). examples: text the code must contain, in any case: a type, attribute, method or framework name (\"LanguageModelSession\", \"@Generable\"); session code rarely shows its imports, so a framework's name finds fewer."
      • changedInput schema / properties / searchIn / description
        Previous value: -"Search scope. \"transcript\" = spoken content, \"code\" = code examples only, \"both\" = everything. Default: \"both\""New value: +"sessions: search the transcripts, the code, or both."
      • addedInput schema / properties / topic
        Added value: +{
        +  "description": "examples: a topic ID, as list_wwdc_videos with view \"topics\" lists them, keeps that topic's sessions; any other text keeps the sessions whose title or topic names contain it, in any case.",
        +  "type": "string"
        +}
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "sessions",
        +  "description": "\"sessions\": the matching sessions, most matches first, each with its count of matches and up to 3 passages or code excerpts, each with its time. \"examples\": the code examples that contain query, each with its session, year and the time it appears, newest year first.",
        +  "enum": [
        +    "sessions",
        +    "examples"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / year / description
        Previous value: -"Limit to specific year (\"2025\", \"2024\", etc.). Leave empty for all years."New value: +"Keeps one WWDC year (\"2025\"); left out, every year."
  2. 19 tool updatesv0.1.0
    • First observedbrowse_wwdc_topics
    • First observedfind_related_wwdc_videos
    • First observedfind_similar_apis
    • First observedget_apple_doc_content
    • First observedget_documentation_updates
    • First observedget_platform_compatibility
    • First observedget_related_apis
    • First observedget_sample_code
    • First observedget_technology_overviews
    • First observedget_wwdc_code_examples
    • First observedget_wwdc_video
    • First observedlist_technologies
    • First observedlist_wwdc_videos
    • First observedlist_wwdc_years
    • First observedresolve_references_batch
    • First observedsearch_apple_docs
    • First observedsearch_docs_map
    • First observedsearch_framework_symbols
    • First observedsearch_wwdc_content

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation4/5

The retrieval tools split cleanly by source (docs pages vs WWDC sessions vs catalogs), but search_apple_docs and search_docs_map both find documentation and their boundary (by-topic vs by-title) must be read carefully to avoid misselection. list_technologies also overlaps with search_apple_docs for sample code, though descriptions do acknowledge this. Mostly distinct purposes with minor friction.

Naming Consistency4/5

All names follow a verb_noun pattern (get_*, list_*, search_*). Minor deviations: get_apple_doc_content uses singular 'doc' while search_apple_docs uses plural 'docs', and search_docs_map drops the 'apple' prefix used by its sibling search tool. Still predictable and readable.

Tool Count5/5

Seven tools is well-scoped for a read-only Apple documentation server. Each tool earns its place: two fetchers, two listers, three searchers, and none feel redundant or padded.

Completeness5/5

The surface covers the full research lifecycle: title lookup, full-text search, browsing catalogs, and reading pages, WWDC videos and transcripts. Since the domain is read-only documentation access, no create/update/delete operations are needed, and no obvious gaps remain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides AI agents with instant access to official Apple developer documentation, Swift programming guides, design guidelines, and Apple Developer YouTube content including WWDC sessions. Uses advanced RAG technology with semantic search and AI reranking to deliver accurate, contextual answers for Apple platform development.
    7
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides AI agents with instant access to official Apple developer documentation, Swift docs, design guidelines, and Apple Developer YouTube content through advanced semantic and hybrid search capabilities. Features AI-powered reranking for accurate retrieval of Apple platform knowledge including iOS, macOS, watchOS, tvOS, and visionOS development resources.
    5
    -
  • A
    license
    A
    quality
    D
    maintenance
    Provides access to Apple's official developer documentation, frameworks, APIs, and WWDC session transcripts across all Apple platforms. It enables AI assistants to search technical guides, sample code, and platform compatibility information using natural language queries.
    18
    959 npm
    1,382
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides access to Apple documentation and WWDC transcripts with semantic, keyword, and hybrid search capabilities, enabling developers to quickly find relevant code examples and technical information.
    121
    MIT