Building GraphQL Server

VerifiedCaution

Build production-ready GraphQL servers with schema design, resolvers, and subscriptions.

Sby Skills Guide Bot
DevelopmentAdvanced
7/24/2026
Claude CodeCodex
#graphql#api#resolvers#subscriptions#schema-design

Recommended for

Automated summary

Guides the construction of a production-ready GraphQL server: SDL or code-first schema, DataLoader-batched resolvers, WebSocket subscriptions and field-level authorization.

Strengths

  • Covers an ordered workflow from schema design through custom scalars, directives, subscriptions and type generation
  • Explicitly addresses N+1 queries with DataLoader plus query depth and complexity limiting
  • Supports multiple ecosystems: Apollo Server, Yoga and Mercurius on Node.js, Strawberry and Ariadne on Python
  • Ships a concrete error table mapping each symptom to a fix

Limitations

  • Assumes external prerequisites (Redis, ORM, graphql-codegen) that the skill neither installs nor configures
  • Aimed mainly at greenfield builds; migrating an existing API is not covered
  • Output paths rely on skill-directory variables and the detailed guide lives in a separate reference file
When to use it

Use it when starting a new GraphQL API or adding schema, resolvers and subscriptions to a Node.js or Python backend.

When not to use it

Avoid it for REST or gRPC work, or when you only need to consume an existing GraphQL endpoint from a client.

Security analysis

Caution
Quality score88/100

The skill is a legitimate GraphQL development guide with no malicious intent or destructive instructions. It does grant Bash and file-edit capabilities for scaffolding/testing, so it is caution rather than safe, but the scope appears constrained and purpose-appropriate.

Findings
  • •Allowed tools include Bash(api:graphql-*), which permits command execution within that scope; no destructive commands are specified in SKILL.md.
  • •Write/Edit permissions can create or modify files under the skill/project directories, as intended for scaffolding GraphQL servers.
  • •References external URLs and may use network/package tooling indirectly, but no credential exfiltration or obfuscated payloads are present.
How this analysis is made

Examples

New GraphQL server
Build a GraphQL API for our e-commerce catalog with products, categories and reviews, using Apollo Server and Prisma. Include DataLoader batching and a paginated products query.
Real-time subscriptions
Add real-time subscriptions to our Yoga GraphQL server so clients are notified when an order status changes, using graphql-ws and Redis pub/sub.
Harden the schema
Our GraphQL endpoint is being hit by deeply nested queries — add depth limiting, query complexity analysis and field-level @auth directives.

name: building-graphql-server description: | Build production-ready GraphQL servers with schema design, resolvers, and subscriptions. Use when building GraphQL APIs with schemas and resolvers. Trigger with phrases like "build GraphQL API", "create GraphQL server", or "setup GraphQL".

allowed-tools: Read, Write, Edit, Grep, Glob, Bash(api:graphql-*) version: 1.0.0 author: Jeremy Longshore jeremy@intentsolutions.io license: MIT compatible-with: claude-code, codex, openclaw tags: [api, graphql, graphql-server]

Building GraphQL Server

Overview

Build production-ready GraphQL servers with SDL-first or code-first schema design, efficient resolver implementations with DataLoader batching, real-time subscriptions via WebSocket, and field-level authorization. Support Apollo Server, Yoga, Mercurius, and Strawberry across Node.js and Python runtimes.

Prerequisites

  • Node.js 18+ with Apollo Server/Yoga/Mercurius, or Python 3.10+ with Strawberry/Ariadne
  • Database with ORM (Prisma, TypeORM, SQLAlchemy) for resolver data sources
  • Redis for subscription pub/sub and DataLoader caching (production deployments)
  • GraphQL client for testing: GraphiQL, Apollo Studio, or Insomnia
  • graphql-codegen for TypeScript type generation from schema (recommended)

Instructions

  1. Examine existing data models, database schemas, and business requirements using Read and Glob to determine the entity graph and relationship structure.
  2. Design the GraphQL schema with type definitions, including Query, Mutation, and Subscription root types, input types for mutations, and connection types for paginated lists.
  3. Implement resolvers for each field, using DataLoader to batch and deduplicate database queries for nested relationships (N+1 query prevention).
  4. Add input validation on mutation arguments using custom scalars (DateTime, Email, URL) and directive-based validation (@constraint(minLength: 1, maxLength: 255)).
  5. Implement field-level authorization using schema directives (@auth(requires: ADMIN)) or resolver middleware that checks user roles from the GraphQL context.
  6. Configure query complexity analysis and depth limiting to prevent abusive queries (maximum depth of 7, maximum complexity score of 1000).
  7. Set up real-time subscriptions using graphql-ws protocol over WebSocket with Redis pub/sub for multi-instance message distribution.
  8. Generate TypeScript types from the schema using graphql-codegen to ensure type safety between schema definitions and resolver implementations.
  9. Write integration tests using executeOperation for query/mutation testing and WebSocket client tests for subscription verification.

See ${CLAUDE_SKILL_DIR}/references/implementation.md for the full implementation guide.

Output

  • ${CLAUDE_SKILL_DIR}/src/schema/ - GraphQL SDL type definitions organized by domain
  • ${CLAUDE_SKILL_DIR}/src/resolvers/ - Resolver implementations per type with DataLoader integration
  • ${CLAUDE_SKILL_DIR}/src/dataloaders/ - DataLoader factories for batched database queries
  • ${CLAUDE_SKILL_DIR}/src/directives/ - Custom schema directives (auth, validation, caching)
  • ${CLAUDE_SKILL_DIR}/src/scalars/ - Custom scalar type definitions (DateTime, JSON, Email)
  • ${CLAUDE_SKILL_DIR}/src/subscriptions/ - Subscription resolvers with pub/sub configuration
  • ${CLAUDE_SKILL_DIR}/generated/types.ts - Auto-generated TypeScript types from schema

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | N+1 query detected | Resolver fetches related records individually inside list resolver | Wrap data access in DataLoader; batch by parent ID array; cache within request scope | | Query complexity exceeded | Client sends deeply nested query exceeding complexity budget | Return error with current complexity score and maximum allowed; suggest query simplification | | Subscription connection dropped | WebSocket heartbeat timeout or network interruption | Implement automatic reconnection in client; use graphql-ws connectionInitWaitTimeout | | Partial resolver failure | One field resolver throws while others succeed | Return partial data with errors array per GraphQL spec; log failed resolver with context | | Schema stitching conflict | Duplicate type names when merging multiple schema modules | Use schema namespacing or federation with @key directives to resolve type ownership |

Refer to ${CLAUDE_SKILL_DIR}/references/errors.md for comprehensive error patterns.

Examples

E-commerce product catalog: Schema with Product, Category, Review types, DataLoader-backed resolvers for nested queries like products { reviews { author } }, and a productUpdated subscription for inventory changes.

Multi-tenant SaaS dashboard: Code-first schema using TypeGraphQL decorators, tenant-scoped resolvers extracting tenantId from JWT context, and field-level visibility based on subscription plan tier.

Federated microservice graph: Apollo Federation with @key and @external directives across User, Order, and Product subgraphs, composed into a unified supergraph with a gateway router.

See ${CLAUDE_SKILL_DIR}/references/examples.md for additional examples.

Resources

  • GraphQL Specification: https://spec.graphql.org/
  • Apollo Server documentation: https://www.apollographql.com/docs/apollo-server/
  • DataLoader pattern: https://github.com/graphql/dataloader
  • graphql-ws protocol: https://github.com/enisdenjo/graphql-ws

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/building-graphql-server-mryiqhu9/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/building-graphql-server-mryiqhu9' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/building-graphql-server-mryiqhu9/download' --output '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md.part' && mv '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md.part' '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Tools declared by the author (check availability in your agent): Read, Write, Edit, Grep, Glob, Bash(api:graphql-*)

Original excerpt: Prerequisites
  • Node.js 18+ with Apollo Server/Yoga/Mercurius, or Python 3.10+ with Strawberry/Ariadne
  • Database with ORM (Prisma, TypeORM, SQLAlchemy) for resolver data sources
  • Redis for subscription pub/sub and DataLoader caching (production deployments)
  • GraphQL client for testing: GraphiQL, Apollo Studio, or Insomnia
  • graphql-codegen for TypeScript type generation from schema (recommended)

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md' && test -s '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/building-graphql-server' && cp -R '.skill-downloads/building-graphql-server-mryiqhu9' '.claude/skills/building-graphql-server'

Codex
test -f '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md' && test -s '.skill-downloads/building-graphql-server-mryiqhu9/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/building-graphql-server' && cp -R '.skill-downloads/building-graphql-server-mryiqhu9' '.agents/skills/building-graphql-server'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/building-graphql-server-mryiqhu9'

openskills read 'building-graphql-server-mryiqhu9'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/building-graphql-server-mryiqhu9/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills