apollo-federation — Claude Code skill for subgraph schemas
Guides an agent through Apollo Federation subgraph schemas: directives, entities with @key, composition errors. Handy when a supergraph spans several GraphQL services.
npx skills add apollographql/skills --skill apollo-federation -a claude-codeWhat apollo-federation does
The skill walks the agent through Federation 2.x syntax. Every subgraph opts in with @link, naming the spec URL and the directives it imports, and the agent helps pick which ones your schema actually needs. The reference covers @key, @shareable, @external, @requires, @provides, @override, @inaccessible and @interfaceObject, each with examples.
Separate files hold multi-subgraph patterns and composition rules with error codes. There are recipes for an entity with a single key field, adding fields to an entity owned elsewhere, computed fields via @requires, shared value types via @shareable, and an entity stub with resolvable: false.
The skill shells out to rover, so composition checks fail without that CLI installed. It points you at rover supergraph compose for a local run and rover subgraph check against a production supergraph. The v2.12 version in the example is illustrative — check the supported versions before copying it, or composition may not go through.
What it helps with
- scaffold a new subgraph schema for a federated supergraph
- define an entity with a unique key via @key
- let several subgraphs resolve the same field with @shareable
- compute a field from external data using @requires
- track down a composition error and its code
Example prompts for the agent
- add a Product entity to this subgraph with a key on id
- why does composition fail when @shareable is set in two subgraphs
- move the price field into this subgraph with @override
How to install apollo-federation
1Skills CLI (Vercel)
npx skills add apollographql/skills --skill apollo-federation -a claude-code2Manually: put the files in place
~/.claude/skills/apollo-federation/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/apollo-federation/
1Skills CLI (Vercel)
npx skills add apollographql/skills --skill apollo-federation -a codex2Manually: put the files in place
.agents/skills/apollo-federation/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add apollographql/skills --skill apollo-federation -a cursor2Manually: put the files in place
.cursor/skills/apollo-federation/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install apollographql/skills apollo-federation2Manually: put the files in place
.github/skills/apollo-federation/SKILL.md1Skills CLI (Vercel)
npx skills add apollographql/skills --skill apollo-federation -a gemini-cli2Platform CLI
gemini skills install https://github.com/apollographql/skills --path skills/apollo-federationManually: put the files in place
.devin/skills/apollo-federation/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add apollographql/skills --skill apollo-federation -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about apollo-federation
How do I install apollo-federation in Claude?
Run npx skills add apollographql/skills --skill apollo-federation -a claude-code. The skill lands in ~/.claude/skills/apollo-federation/SKILL.md.
What does apollo-federation do?
It guides schema authoring for Federation 2.x subgraphs: the @link opt-in, federation directives, multi-subgraph patterns, and debugging composition errors.
What do I need for the skill to work?
The rover CLI, since rover supergraph compose and rover subgraph check run through it. Schemas work with any Federation 2.x compatible library, such as Apollo Server or GraphQL Yoga.
Source text
SKILL.md · MIT
---
name: apollo-federation
description: >
Guide for authoring Apollo Federation subgraph schemas. Use this skill when:
(1) creating new subgraph schemas for a federated supergraph,
(2) defining or modifying entities with @key,
(3) sharing types/fields across subgraphs with @shareable,
(4) working with federation directives (@external, @requires, @provides, @override, @inaccessible),
(5) troubleshooting composition errors,
(6) any task involving federation schema design patterns.
license: MIT
compatibility: Works with any Federation 2.x compatible subgraph library (Apollo Server, GraphQL Yoga, etc.)
metadata:
author: apollographql
version: "1.0.2"
allowed-tools: Bash(rover:*) Read Write Edit Glob Grep
---
# Apollo Federation Schema Authoring
Apollo Federation enables composing multiple GraphQL APIs (subgraphs) into a unified supergraph.
## Federation 2 Schema Setup
Every Federation 2 subgraph must opt-in via `@link`:
```graphql
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.12",
import: ["@key", "@shareable", "@external", "@requires", "@provides"])
```
Import only the directives your subgraph uses. The version shown (`v2.12`) is
illustrative — check the [Federation changelog](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/reference/versions)
for currently supported versions before copying it verbatim.
> A subgraph's `@link` version is a floor, not the composition version — see
> [Federation versions](references/composition.md#federation-versions-floor-vs-composition)
> for the full explanation.
## Core Directives Quick Reference
| Directive | Purpose | Example |
|-----------|---------|---------|
| `@key` | Define entity with unique key | `type Product @key(fields: "id")` |
| `@shareable` | Allow multiple subgraphs to resolve field | `type Position @shareable { x: Int! }` |
| `@external` | Reference field from another subgraph | `weight: Int @external` |
| `@requires` | Computed field depending on external fields | `shippingCost: Int @requires(fields: "weight")` |
| `@provides` | Conditionally resolve external field | `@provides(fields: "name")` |
| `@override` | Migrate field to this subgraph | `@override(from: "Products")` |
| `@inaccessible` | Hide from API schema | `internalId: ID! @inaccessible` |
| `@interfaceObject` | Add fields to entity interface | `type Media @interfaceObject` |
## Reference Files
Detailed documentation for specific topics:
- [Directives](references/directives.md) - All federation directives with syntax, examples, and rules
- [Schema Patterns](references/schema-patterns.md) - Multi-subgraph patterns and recipes
- [Composition](references/composition.md) - Composition rules, error codes, and debugging
## Key Patterns
### Entity Definition
```graphql
type Product @key(fields: "id") {
id: ID!
name: String!
price: Int
}
```
### Entity Contributions Across Subgraphs
```graphql
# Products subgraph
type Product @key(fields: "id") {
id: ID!
name: String!
price: Int
}
# Reviews subgraph
type Product @key(fields: "id") {
id: ID!
reviews: [Review!]!
averageRating: Float
}
```
### Computed Fields with @requires
```graphql
type Product @key(fields: "id") {
id: ID!
size: Int @external
weight: Int @external
shippingEstimate: String @requires(fields: "size weight")
}
```
### Value Types with @shareable
```graphql
type Money @shareable {
amount: Int!
currency: String!
}
```
### Entity Stub (Reference Without Contributing)
```graphql
type Product @key(fields: "id", resolvable: false) {
id: ID!
}
```
## Ground Rules
- ALWAYS use Federation 2.x syntax with `@link` directive
- ALWAYS import only the directives your subgraph uses
- NEVER use `@shareable` without ensuring all subgraphs return identical values for that field
- PREFER `@key` with single ID field for simple entity identification
- USE `rover supergraph compose` to validate composition locally
- USE `rover subgraph check` to validate against production supergraph
© apollographql · MIT · apollographql/skills