Building MCP Servers: Part 1 — Getting Started with Resources

by cycle-sync-ai

248 downloads
Not rated
GitHub

About

This tutorial walks you through setting up a basic MCP (Model Context Protocol) server to expose read-only resources to Large Language Models (LLMs) like Claude.

Details

Author
cycle-sync-ai
Downloads
248
Categories
Other

- Read‑only resource endpoints via unique URIs
- Supports text and binary content types
- Metadata like display name and MIME type
- Explicit user permission ensures security
- Example servers: documentation, logs, customers
- Uses Node.js/TypeScript with @modelcontextprotocol/sdk

Create a new Node.js TypeScript project, install the @modelcontextprotocol/sdk and TypeScript dev dependencies, configure tsconfig.json with target: ES2022 and module: Node16, and implement a resource server using the ResourceServer class (e.g., the greeting server example in the README).

Building MCP Servers: Part 1 — Getting Started with Resources

This tutorial walks you through setting up a basic MCP (Model Context Protocol) server to expose read-only resources to Large Language Models (LLMs) like Claude. You’ll learn what MCP is, why resources are useful, and how to initialize a Node.js/TypeScript project with the @modelcontextprotocol/sdk.

Table of Contents

- What is Model Context Protocol?
- What are MCP Resources?
- Why Use Resources?
- Example Servers
- Documentation Server
- Log Analysis Server
- Customer Data Server
- Getting Started
- Prerequisites
- Installation
- Project Setup
- Next Steps
- MCP Tools (Dynamic Actions)
- Tools vs Prompts
- Complete Our Greeting Server
- Sources & Additional Reading
- License

What is Model Context Protocol?

The Model Context Protocol (MCP) is a standardized interface that allows LLMs to safely interact with external data and services. With MCP, you can expose files, databases, APIs, and more to your AI models in a controlled manner.

What are MCP Resources?

Resources are read-only endpoints that expose content (text or binary) via a unique URI. Examples include:

- file:///path/to/file.txt
- database://users/123
- api://weather/latest

Each resource has metadata like a display name and MIME type.

Why Use Resources?

Resources enable LLMs to:

- Read files and databases
- Execute commands
- Access APIs
- Interact with local tools

All interactions require explicit user permission, ensuring security and auditability.

Example Servers

Documentation Server

Expose your documentation:

docs://api/reference     → API documentation
docs://guides/getting-started  → User guides

Log Analysis Server

Serve system logs:

logs://system/today      → Today's logs
logs://errors/recent     → Recent error messages

Customer Data Server

Provide customer insights:

customers://profiles/summary   → Customer overview
customers://feedback/recent    → Latest feedback

Getting Started

Prerequisites

- Node.js (>= 16)
- npm (>= 8)
- TypeScript

Installation

mkdir hello-mcp
cd hello-mcp
npm init -y
npm install @modelcontextprotocol/sdk
npm install -D typescript @types/node

Project Setup

1. Update package.json:

   {
     "name": "hello-mcp",
     "version": "1.0.0",
     "type": "module",
     "scripts": {
       "build": "tsc",
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "dependencies": {
       "@modelcontextprotocol/sdk": "^1.1.0"
     },
     "devDependencies": {
       "typescript": "^5.7.2",
       "@types/node": "^22.10.5"
     }
   }
   

2. Create tsconfig.json:

   {
     "compilerOptions": {
       "target": "ES2022",
       "module": "Node16",
       "moduleResolution": "Node16",
       "outDir": "./build",
       "rootDir": "./src",
       "strict": true,
       "esModuleInterop": true,
       "skipLibCheck": true,
       "forceConsistentCasingInFileNames": true
     },
     "include": ["src/*/"]
   }
   

3. Create a src/ directory and start coding your MCP server.

Next Steps

Check out Part 2 for configuring transports and advanced features.

MCP Tools (Dynamic Actions)

MCP Tools (also called dynamic actions) let you define custom functions that the LLM can call during a session, extending MCP’s capabilities beyond static resources.

Tools vs Prompts

| Aspect | MCP Tools | Prompts |
| ----------- | ----------------------- | ----------------------- |
| Capability | Executes code & actions | Static natural language |
| Security | Controlled & auditable | No external effects |
| Flexibility | High (custom logic) | Limited to inference |

Complete Our Greeting Server

Below is a simple example of a greeting server exposing a greeting resource:

import { ResourceServer } from "@modelcontextprotocol/sdk";

const server = new ResourceServer({ port: 3000 });

server.addResource({
uri: "greeting://hello",
displayName: "Greeting Resource",
fn: async (req) => {
const name = req.query.name || "World";
return Hello, ${name}!;
},
});

server.listen(() => console.log("Greeting server running on port 3000"));

Sources & Additional Reading

- MCP Prompts
- unichat-mcp-server
- Claude Prompt Engineering
- 10 Prompt Engineering Best Practices
- Prompting Guide

License

MIT

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.