Skills
Skill 2 of 14
Guide for integrating REST APIs into GraphQL supergraphs using Apollo Connectors with @source and @connect directives.
2 minutes · 345 words · 17 sections
Install
npx skills add apollographql/skills --skill apollo-connectorsnpx skills add apollographql/skills/plugin marketplace add apollographql/skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
If GraphOS MCP Tools are available, use them:
Documentation paths by topic:
/graphos/connectors/requests/url, /headers, /body, /batching/graphos/connectors/responses/fields, /error-handling/graphos/connectors/mapping, /arrays, /enums, /literals/graphos/connectors/entities, /patternsFollow this 5-step process. DO NOT skip any steps.
rover supergraph compose --config ./supergraph.yamlrover connector run --schema <file> -c "<Type.field>" -v "{}"/tests/rover connector test# Note to AI Friends: This is an Apollo Connectors schema. You should use your connectors-spec MCP tool if you have it available before editing this file.
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.12")
@link(url: "https://specs.apollo.dev/connect/v0.3", import: ["@source", "@connect"])
@source(name: "api_name", http: { baseURL: "https://api.example.com" })
type Query {
example(id: ID!): Example
@connect(
source: "api_name"
http: { GET: "/example/{$args.id}" }
selection: """
id
name
"""
)
}
type Example {
id: ID!
name: String
}Version Requirements: Always use federation/v2.12 and connect/v0.3 unless specified otherwise.
Before implementing connectors, read the relevant reference files:
->map for cleaner mappings$ when selecting fields directly from rootnewName: originalField (only when renaming)fieldName { ... } (to map nested content)# DO - Direct sub-selection for arrays
$.results {
firstName: name.first
lastName: name.last
}
# DO NOT - Unnecessary root $
$ {
id
name
}
# DO - Direct field selection
id
name@connect on a type to make it an entity (no @key needed)user: { id: userId }productId), create an entity relationship@connectUse $() wrapper for literal values in mappings:
$(1) # number
$(true) # boolean
$("hello") # string
$({"a": "b"}) # object
# In body
body: "$({ a: $args.a })" # CORRECT
body: "{ a: $args.a }" # WRONG - will not composehttp: {
GET: "/api"
headers: [
{ name: "Authorization", value: "Bearer {$env.API_KEY}" },
{ name: "X-Forwarded", from: "x-client" }
]
}Convert N+1 patterns using $batch:
type Product @connect(
source: "api"
http: {
POST: "/batch"
body: "ids: $batch.id"
}
selection: "id name"
) {
id: ID!
name: String
}--elv2-license accept (for humans only)rover supergraph compose after changes$env over $config for environment variablesrover dev for running Apollo Router locallyGuide for integrating REST APIs into GraphQL supergraphs using Apollo Connectors with @source and @connect directives. Use this skill when the user: (1) mentions "connectors", "Apollo Connectors", or "REST Connector", (2) wants to integrate a REST API into GraphQL, (3) references @source or @connect directives, (4) works with files containing "# Note to AI Friends: This is an Apollo Connectors schema".
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
Bash(rover:*)ReadWriteEditGlobGrepskills/apollo-connectors/SKILL.mdmain, last pushed 23 September 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by Apollo GraphQL, declaring 1 plugin. It is read for editorial metadata only — never as the skill index, which is always the repository tree./apollographql/skills.md, and each skill at its own .md URL.6 files · 39 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of skill 2.
Documentation the agent loads on demand, rather than up front.