mcpField
A
apollo-federation

apollo-federation

github.com/apollographqlDevelopment1211.9k installsUpdated 1d ago
Repository

About apollo-federation

apollo-federation is a reference skill for authoring Apollo Federation 2 GraphQL schemas. It explains federation directives and schema patterns for developers composing subgraphs into a supergraph.

Key features

  1. 01Federation 2 schema setup with @link
  2. 02Core directive syntax and purposes
  3. 03Entity and subgraph contribution patterns
  4. 04Computed fields with @requires
  5. 05Local composition and production checks

Use cases

  1. 01Defining entities across subgraphs
  2. 02Adding fields that depend on external fields
  3. 03Sharing value types between subgraphs
  4. 04Validating a supergraph composition

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/apollographql/skills --skill apollo-federation

After installing, type/apollo-federationin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
composition.md
directives.md
schema-patterns.md

Details

From the project README

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:

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 for currently supported versions before copying it verbatim.

A subgraph's @link version is a floor, not the composition version — see Federation versions for the full explanation.

Core Directives Quick Reference

DirectivePurposeExample
@keyDefine entity with unique keytype Product @key(fields: "id")
@shareableAllow multiple subgraphs to resolve fieldtype Position @shareable { x: Int! }
@externalReference field from another subgraphweight: Int @external
@requiresComputed field depending on external fieldsshippingCost: Int @requires(fields: "weight")
@providesConditionally resolve external field@provides(fields: "name")
@overrideMigrate field to this subgraph@override(from: "Products")
@inaccessibleHide from API schemainternalId: ID! @inaccessible
@interfaceObjectAdd fields to entity interfacetype Media @interfaceObject

Reference Files

Detailed documentation for specific topics:

  • Directives - All federation directives with syntax, examples, and rules
  • Schema Patterns - Multi-subgraph patterns and recipes
  • Composition - Composition rules, error codes, and debugging

Key Patterns

Entity Definition
type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}
Entity Contributions Across Subgraphs
# 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
type Product @key(fields: "id") {
  id: ID!
  size: Int @external
  weight: Int @external
  shippingEstimate: String @requires(fields: "size weight")
}
Value Types with @shareable
type Money @shareable {
  amount: Int!
  currency: String!
}
Entity Stub (Reference Without Contributing)
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

Comments

Markdown supported