Skip to main content
Glama

MCP Template - Build Your Own AI Server

A practical template for creating Model Context Protocol (MCP) servers that enable AI assistants to interact with your data and services.

Overview

This template provides a foundation for building MCP servers - specialized services that AI assistants can connect to for accessing external data, performing operations, and extending their capabilities beyond their training data.

Key Capabilities:

  • Expose data as queryable resources

  • Provide custom tools for AI assistants to execute

  • Handle real-time data operations (CRUD)

  • Connect multiple data sources and services

Related MCP server: MCP Server Boilerplate

Prerequisites

  • Node.js 18+ and npm

  • TypeScript knowledge

  • Understanding of REST APIs or similar concepts

Quick Start

git clone https://github.com/rhit-bhuwalk/MCP_TEMPLATE.git
cd MCP_TEMPLATE
npm install
npm run build
npm start

This launches a server with sample user data that demonstrates core MCP functionality.

Core Concepts

Resources

Resources represent data collections that AI assistants can query. Think of them as API endpoints that return structured data.

// Register a resource
dataService.registerResource('users', 'User account information');

// AI can now query: "Show me all users" or "Find user with ID 123"

Tools

Tools are functions that AI assistants can execute to perform specific operations on your data.

// Register a tool
server.registerTool(
  'create_user',
  'Create a new user account',
  z.object({
    name: z.string(),
    email: z.string().email()
  }),
  async (args) => {
    return await dataService.create('mcp://users', args);
  }
);

Implementation Guide

1. Define Your Data Structure

Start by defining the shape of your data:

interface Product {
  id: string;
  name: string;
  price: number;
  category: string;
  inStock: boolean;
}

2. Register Resources

Make your data discoverable to AI assistants:

// In your server setup
dataService.registerResource('products', 'Product inventory data');

// Seed with sample data
const sampleProducts: Product[] = [
  { id: '1', name: 'Laptop', price: 999, category: 'Electronics', inStock: true },
  { id: '2', name: 'Coffee Mug', price: 15, category: 'Kitchen', inStock: false }
];

dataService.seedData('mcp://products', sampleProducts);

3. Add Custom Tools

Create specific operations for your use case:

// Inventory management tool
server.registerTool(
  'update_stock_status',
  'Update product stock availability',
  z.object({
    productId: z.string(),
    inStock: z.boolean()
  }),
  async (args) => {
    const result = await dataService.update(
      'mcp://products', 
      args.productId, 
      { inStock: args.inStock }
    );
    return { success: true, product: result };
  }
);

// Analytics tool
server.registerTool(
  'get_category_summary',
  'Get inventory summary by category',
  z.object({
    category: z.string().optional()
  }),
  async (args) => {
    const products = await dataService.queryResource('mcp://products', {
      filter: args.category ? { category: args.category } : undefined
    });
    
    return {
      totalProducts: products.length,
      inStock: products.filter(p => p.inStock).length,
      outOfStock: products.filter(p => !p.inStock).length,
      averagePrice: products.reduce((sum, p) => sum + p.price, 0) / products.length
    };
  }
);

4. Connect Real Data Sources

Replace in-memory storage with your actual data:

// Example: Connect to a database
class DatabaseDataService extends DataService {
  async queryResource(uri: string, query?: any) {
    const resourceType = uri.split('://')[1];
    
    switch (resourceType) {
      case 'products':
        return await this.db.products.findMany({
          where: query?.filter || {}
        });
      case 'orders':
        return await this.db.orders.findMany({
          include: { items: true }
        });
      default:
        throw new Error(`Unknown resource: ${resourceType}`);
    }
  }
}

Project Structure

src/
├── core/           # Core MCP server functionality
├── services/       # Data service implementations  
├── examples/       # Example implementations
│   └── server.ts   # Complete working example
└── index.ts        # Main entry point

Start here: src/examples/server.ts contains a complete implementation showing all concepts in practice.

Advanced Patterns

Multi-Resource Operations

server.registerTool(
  'process_order',
  'Process customer order and update inventory',
  z.object({
    customerId: z.string(),
    productIds: z.array(z.string())
  }),
  async (args) => {
    // Check inventory
    const products = await dataService.queryByIds('mcp://products', args.productIds);
    
    // Create order
    const order = await dataService.create('mcp://orders', {
      customerId: args.customerId,
      items: products,
      total: products.reduce((sum, p) => sum + p.price, 0)
    });
    
    // Update inventory
    for (const product of products) {
      await dataService.update('mcp://products', product.id, { 
        inStock: false 
      });
    }
    
    return { orderId: order.id, total: order.total };
  }
);

Error Handling and Validation

server.registerTool(
  'safe_user_operation',
  'Safely perform user operations with validation',
  schema,
  async (args) => {
    try {
      // Validate business rules
      if (args.email && !isValidEmail(args.email)) {
        throw new Error('Invalid email format');
      }
      
      const result = await dataService.performOperation(args);
      return { success: true, data: result };
      
    } catch (error) {
      return { 
        success: false, 
        error: error.message,
        code: 'VALIDATION_ERROR'
      };
    }
  }
);

Testing Your Server

# Run tests
npm test

# Test with a real AI assistant
npm start
# Connect Claude Desktop or other MCP-compatible client

Deployment Considerations

  • Authentication: Add API keys or OAuth for production use

  • Rate Limiting: Implement request throttling for high-traffic scenarios

  • Data Validation: Always validate inputs from AI assistants

  • Logging: Add comprehensive logging for debugging and monitoring

  • Error Handling: Provide clear error messages that help AI assistants understand what went wrong

Next Steps

  1. Examine the examples - Understand the patterns by studying src/examples/server.ts

  2. Adapt the data models - Replace sample data with your domain objects

  3. Add domain-specific tools - Create operations that match your business logic

  4. Connect real data sources - Integrate with databases, APIs, or file systems

  5. Test with AI assistants - Verify functionality with Claude, ChatGPT, or other MCP clients

This template provides the scaffolding - your domain expertise and data make it valuable.

Available Tools

6 tools
create_recordC

Create a new record in a resource

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesRecord data to create
resourceUriYesURI of the resource

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates a record but fails to mention critical aspects like whether this is a mutating operation, what permissions are needed, error handling, or response format. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero wasted words, making it highly concise and front-loaded. It efficiently communicates the core purpose without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a creation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, error cases, and what the tool returns, leaving the agent with incomplete context for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents both parameters ('resourceUri' and 'data') adequately. The description adds no additional semantic context beyond implying these parameters are used for creation, which is minimal value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and target ('new record in a resource'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'update_record' or 'delete_record' beyond the basic verb, missing explicit scope distinctions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'update_record' or 'delete_record'. The description lacks context about prerequisites, such as whether the resource must exist or if authentication is required, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_recordC

Delete a record from a resource

ParametersJSON Schema
NameRequiredDescriptionDefault
recordIdYesID of the record to delete
resourceUriYesURI of the resource

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Delete' implies a destructive mutation, but fails to mention critical aspects like permissions required, whether deletion is permanent or reversible, side effects on related data, or error handling. This leaves significant gaps for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the action and resource without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a destructive mutation with no annotations and no output schema), the description is inadequate. It lacks details on behavioral traits, error cases, return values, or how it fits with siblings, leaving the agent under-informed for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear descriptions for both parameters ('recordId' and 'resourceUri'). The description adds no additional meaning beyond what the schema provides, such as format examples or interdependencies, so it meets the baseline for high schema coverage without enhancing parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Delete') and resource ('record from a resource'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'update_record' or 'create_record' beyond the obvious action difference, missing specific scope or constraints that would warrant a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'update_record' or 'create_record', nor any prerequisites or exclusions. The description merely states what it does without context, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recordC

Get a specific record by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
recordIdYesID of the record to retrieve
resourceUriYesURI of the resource

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a read operation ('Get'), implying safety, but doesn't mention error handling (e.g., what happens if the ID is invalid), permissions required, rate limits, or return format. This leaves significant gaps for a tool with two required parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., record data or error), behavioral traits like idempotency, or how it differs from siblings. Given the complexity of retrieval operations and lack of structured data, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear parameter descriptions in the schema (e.g., 'ID of the record to retrieve'). The description adds no additional meaning beyond implying 'recordId' is used for retrieval, which is already covered. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('record') with the specific mechanism ('by ID'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'list_records' or 'search_records' which also retrieve records but with different mechanisms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'list_records' or 'search_records'. It mentions retrieving by ID but doesn't specify prerequisites (e.g., needing the ID) or exclusions (e.g., not for bulk retrieval).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recordsC

List records from a resource

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter criteria
maxRecordsNoMaximum number of records to return. Defaults to 100.
resourceUriYesURI of the resource to query
sortNoSpecifies how to sort the records

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'List records' implies a read operation, but the description doesn't mention pagination behavior (though maxRecords parameter hints at it), authentication requirements, rate limits, error conditions, or what format the records are returned in. It provides minimal behavioral context beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just 5 words with no wasted language. It's front-loaded with the core purpose. While it may be too brief for completeness, as a standalone statement it's efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, no annotations, no output schema, and multiple sibling alternatives, the description is inadequate. It doesn't explain the relationship between this listing operation and other record operations, doesn't describe return format, and provides minimal context for when this specific listing approach is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain how 'resourceUri' relates to the listing, what filtering capabilities exist, or sorting behavior. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List records from a resource' clearly states the action (list) and target (records from a resource), but it's vague about scope and doesn't distinguish from sibling tools like 'search_records' or 'get_record'. It provides basic purpose but lacks specificity about what kind of listing operation this performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives like 'search_records' or 'get_record'. The description gives no indication of prerequisites, appropriate contexts, or exclusions. Users must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_recordsC

Search for records containing specific text

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoSpecific fields to search in. If not provided, searches all text fields.
maxRecordsNoMaximum number of records to return. Defaults to 100.
resourceUriYesURI of the resource
searchTermYesText to search for in records

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like whether this is a read-only operation (implied but not explicit), performance characteristics, pagination behavior, error conditions, or authentication requirements. The description is minimal and lacks operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple search tool and front-loads the core purpose without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete for a search tool with 4 parameters. It doesn't explain what 'records' are, the search scope, result format, or limitations. For a tool that likely returns complex data, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all 4 parameters. The description adds no additional meaning beyond what's in the schema—it doesn't explain parameter interactions, default behaviors beyond schema defaults, or search semantics. Baseline 3 is appropriate when schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Search for records containing specific text' clearly states the verb ('search') and resource ('records'), but it's vague about scope and doesn't distinguish from sibling tools like 'list_records' or 'get_record'. It doesn't specify what type of records or system is involved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'list_records' or 'get_record'. The description implies text-based searching but doesn't clarify if this is for full-text search versus metadata filtering or when to prefer one sibling tool over another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recordC

Update a record in a resource

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesNew record data
recordIdYesID of the record to update
resourceUriYesURI of the resource

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates a record but does not cover critical aspects like required permissions, whether the update is idempotent, error handling, or what happens on success/failure. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It is front-loaded and directly states the tool's purpose without unnecessary elaboration, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation with three required parameters), lack of annotations, and no output schema, the description is incomplete. It fails to address behavioral traits, usage context, or return values, leaving the agent with insufficient information for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with clear descriptions for all three parameters (resourceUri, recordId, data). The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and the target ('a record in a resource'), distinguishing it from siblings like create_record or delete_record. However, it lacks specificity about what 'update' entails beyond the basic verb, such as whether it's a full or partial update, which could help differentiate it further.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like create_record or delete_record. The description does not mention prerequisites (e.g., needing an existing record) or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • First observedcreate_record
    • First observeddelete_record
    • First observedget_record
    • First observedlist_records
    • First observedsearch_records
    • First observedupdate_record

TDQS

A3.5/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose targeting specific CRUD operations: create, delete, get, list, search, and update. There is no overlap in functionality, making it easy for an agent to select the correct tool for each action without confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with 'record' as the noun, using snake_case uniformly. The naming is predictable and readable, with no deviations in style or convention across the set.

Tool Count5/5

With 6 tools, this server is well-scoped for basic CRUD operations with added search functionality. Each tool earns its place, providing a complete and manageable set without being overly sparse or bloated for the domain.

Completeness5/5

The tool surface offers complete CRUD coverage (create, read, update, delete) plus list and search operations, covering the full lifecycle for a generic record resource. There are no obvious gaps, and agents can perform all essential operations without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • A Model Context Protocol server for Wix AI tools

  • The Telnyx MCP server is an official implementation of the Model Context Protocol that enables AI clients (like Claude Desktop, Cursor, and OpenAI Agents) to interact with Telnyx's telephony, messaging, and AI assistant APIs. It provides comprehensive capabilities including making and managing phone calls, sending SMS/MMS messages, purchasing and configuring phone numbers, creating AI assistants with custom instructions, managing cloud storage buckets, scraping and embedding website content, and handling integration secrets. The server exists as both a local implementation and a remotely hosted version, allowing developers to integrate real-world communication infrastructure directly into AI applications.

  • The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    A starter template for building Model Context Protocol servers that integrate with AI assistants like Claude and Cursor, providing custom tools, resource providers, and prompt templates.
    2
    0
    -
  • F
    license
    C
    quality
    D
    maintenance
    A starter template for building Model Context Protocol servers that integrate with AI assistants like Claude and Cursor, providing custom tools, resource providers, and prompt templates.
    2
    0
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kbhuw/MCP_TEMPLATE'

If you have feedback or need assistance with the MCP directory API, please join our Discord server