GraphQL Protocol Setup
SkillDev toolsLets your agent set up the @data-client/graphql package for GraphQL APIs with auth and custom endpoint options.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the GraphQL Protocol Setup skill
About this capability
Set up @data-client/graphql for GraphQL APIs. Configures GQLEndpoint with auth and custom options. Use after data-client-setup detects GraphQL patterns.
What this skill tells your AI
The instructions your AI receives, as published by reactive/data-client in .agents/skills/data-client-graphql-setup/SKILL.md and read by ahel’s review.
This skill configures @data-client/graphql for a project. It should be applied after data-client-setup detects GraphQL patterns.
Installation
Install the GraphQL package alongside the core package:
# npm
npm install @data-client/graphql
# yarn
yarn add @data-client/graphql
# pnpm
pnpm add @data-client/graphql
GQLEndpoint Setup
Basic Configuration
Create a file at src/api/gql.ts (or similar):
import { GQLEndpoint } from '@data-client/graphql';
export const gql = new GQLEndpoint('/graphql');
Detection Checklist
Scan the existing codebase for GraphQL patterns:
- GraphQL endpoint URL: Look for
/graphqlor custom paths - Authentication: Check for auth headers in existing GraphQL client setup
- Custom headers: API keys, tenant IDs, etc.
- Error handling: GraphQL error parsing patterns
With Authentication
import { GQLEndpoint } from '@data-client/graphql';
export const gql = new GQLEndpoint('/graphql', {
getHeaders() {
const token = localStorage.getItem('authToken');
return {
'Content-Type': 'application/json',
...(token && { Authorization: `Bearer ${token}` }),
};
},
});
Async Authentication (token refresh)
import { GQLEndpoint } from '@data-client/graphql';
export const gql = new GQLEndpoint('/graphql', {
async getHeaders() {
const token = await getValidToken();
return {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
};
},
});
Custom Error Handling
import { GQLEndpoint } from '@data-client/graphql';
class CustomGQLEndpoint extends GQLEndpoint {
async fetchResponse(input: RequestInfo, init: RequestInit): Promise<any> {
const response = await super.fetchResponse(input, init);
// Handle GraphQL errors
if (response.errors?.length) {
const authError = response.errors.find(
e => e.extensions?.code === 'UNAUTHENTICATED'
);
if (authError) {
window.dispatchEvent(new CustomEvent('auth:expired'));
}
}
return response;
}
}
export const gql = new CustomGQLEndpoint('/graphql');
Defining Queries and Mutations
Query Example
import { gql } from './gql';
import { User } from '../schemas/User';
export const getUser = gql.query(
(v: { id: string }) => `
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
`,
{ schema: User },
);
Mutation Example
import { gql } from './gql';
import { User } from '../schemas/User';
export const updateUser = gql.mutation(
(v: { id: string; name: string }) => `
mutation UpdateUser($id: ID!, $name: String!) {
updateUser(id: $id, name: $name) {
id
name
}
}
`,
{ schema: User },
);
With Collection
import { gql } from './gql';
import { User, UserCollection } from '../schemas/User';
export const listUsers = gql.query(
() => `
query ListUsers {
users {
id
name
email
}
}
`,
{ schema: UserCollection },
);
export const createUser = gql.mutation(
(v: { name: string; email: string }) => `
mutation CreateUser($name: String!, $email: String!) {
createUser(name: $name, email: $email) {
id
name
email
}
}
`,
{ schema: UserCollection.push },
);
Usage in Components
import { useSuspense, useController } from '@data-client/react';
import { getUser, updateUser } from './api/users';
function UserProfile({ id }: { id: string }) {
const user = useSuspense(getUser, { id });
const ctrl = useController();
const handleUpdate = async (name: string) => {
await ctrl.fetch(updateUser, { id, name });
};
return (
<div>
<h1>{user.name}</h1>
<button onClick={() => handleUpdate('New Name')}>Update</button>
</div>
);
}
Next Steps
- Apply skill "data-client-schema" to define Entity classes
- Apply skill "data-client-react" or "data-client-vue" for usage
References
- GQLEndpoint - Full GQLEndpoint API
- GraphQL Guide - GraphQL usage guide
- Authentication Guide - Auth patterns for GraphQL
Signals
- GitHub stars
- 2k
- Forks
- 99
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
data-client-graphql-setup- Source
- github.com/reactive/data-client