Labsco
husamabusafa logo

Hasura GraphQL

โ˜… 23

from husamabusafa

Interact with a Hasura GraphQL endpoint, enabling schema introspection, queries, mutations, and data aggregation.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedPaid serviceAdvanced setup

Advanced Hasura GraphQL MCP Server

Version: 1.1.0

This Model Context Protocol (MCP) server provides an advanced interface for AI agents (like those in Cursor or Claude Desktop) to interact with a Hasura GraphQL endpoint. It enables agents to discover the API structure, execute both read-only queries and mutations (with caution), preview data, perform aggregations, and check service health.

This server enhances LLM capabilities by allowing them to leverage your Hasura API dynamically based on natural language requests.

Features

This server exposes the following MCP capabilities:

Resources:

  • Hasura GraphQL Schema (hasura:/schema)
    • Provides the full GraphQL schema definition obtained via standard introspection.
    • MIME Type: application/json
    • Agents can read this resource to understand the complete structure of the API, including types, fields, arguments, directives, etc.

Tools:

  • run_graphql_query

    • Description: Executes a read-only GraphQL query against the Hasura endpoint. Use this for fetching data when a specific tool isn't available. Ensure the query does not modify data. Example: query { users { id name } }
    • Input: { query: string, variables?: object }
    • Note: Performs a basic check to prevent execution of strings starting with mutation. Primarily relies on the query itself being read-only.
  • run_graphql_mutation

    • Description: Executes a GraphQL mutation to insert, update, or delete data. Use with caution, ensure the operation is intended and safe. Relies on Hasura permissions configured for the provided Admin Secret or default role. Example: mutation { insert_users_one(object: {name: "Test"}) { id } }
    • Input: { mutation: string, variables?: object }
    • Security: Allows any mutation permitted by the Hasura role. Ensure appropriate Hasura permissions are configured.
  • list_tables

    • Description: Lists available data tables (or collections) managed by Hasura, organized by schema with descriptions, based on introspection heuristics (looks for object types with an 'id' field, excluding internal/aggregate types). Useful for discovering available data sources.
    • Input: { schemaName?: string } (Optional schema name, attempts to infer from field descriptions if possible, defaults to 'public' conceptually)
  • describe_table

    • Description: Shows the structure of a specific table including all its columns (fields) with their GraphQL types and descriptions.
    • Input: { tableName: string, schemaName?: string }
  • list_root_fields

    • Description: Lists the available top-level query, mutation, or subscription fields from the GraphQL schema. Useful for understanding the primary entry points for operations.
    • Input: { fieldType?: 'QUERY' | 'MUTATION' | 'SUBSCRIPTION' } (Optional filter)
  • describe_graphql_type

    • Description: Provides details about a specific GraphQL type (Object, Input, Scalar, Enum, Interface, Union) using schema introspection. Essential for understanding how to structure queries or mutations involving specific types.
    • Input: { typeName: string } (Case-sensitive type name)
  • preview_table_data

    • Description: Fetches a limited sample of rows (default 5) from a specified table to preview its data structure and content. Selects common scalar and enum fields automatically.
    • Input: { tableName: string, limit?: number }
  • aggregate_data

    • Description: Performs a simple aggregation (count, sum, avg, min, max) on a specified table, optionally applying a Hasura 'where' filter. Use 'list_tables' to find table names. Requires 'field' for non-count aggregations.
    • Input: { tableName: string, aggregateFunction: 'count'|'sum'|'avg'|'min'|'max', field?: string, filter?: object }
  • health_check

    • Description: Checks if the configured Hasura GraphQL endpoint is reachable and responding to a basic GraphQL query ({ __typename }). Can optionally check a specific HTTP health endpoint URL if known.
    • Input: { healthEndpointUrl?: string } (Optional specific health URL)

Development

  • Run in Dev Mode: Use pnpm run dev <ENDPOINT> [SECRET] to run the server directly with ts-node for faster iteration (no build step needed).
  • Testing: Test individual tools by running the server manually (pnpm start ...) and piping JSON-RPC requests to its stdin.