ArbindBuilds LogoArbindBuilds
Blog
CheatsheetsProjectsLinksAbout
Hire Me

ArbindBuilds

Build. Design. Repeat.

© 2026 ArbindBuilds.
All rights reserved.

Site Map

  • Home
  • Blog
  • Projects
  • About
  • Uses

Content

  • Cheatsheets
  • AI Tools
  • AI Prompts
  • Links

Products

  • Speakify
  • Gumroad Store
  • GitHub
  • Twitter / X

Made with care in Assam, India.

  1. Home/
  2. Blog/
  3. Building a Personal MCP Server for Claude
Guide
Arbind Singh·April 21, 2026·4 min read·

Building a Personal MCP Server for Claude

Stop copy-pasting your bio. Build a custom Model Context Protocol (MCP) server in TypeScript to give Claude native access to your projects, resume, and personal context.

Building a Personal MCP Server for Claude

I’m tired of pasting my "about me" blurb every time I start a new chat with Claude. If you’re a developer using Claude for Desktop, you should be using the Model Context Protocol (MCP). It’s an open standard that lets AI models interact with your local data and tools through a unified interface.

Instead of generic context, we’re going to build a personal MCP server in TypeScript. This server will act as a dedicated knowledge base for your bio, active projects, and technical stack. When you ask Claude "What should I work on next?", it will actually know what's in your active_projects.json.

The Stack

We’re keeping this lean. No databases, no complex auth. Just a local Node.js process talking to Claude over stdio.

  • Language: TypeScript
  • Runtime: Node.js (v18+)
  • SDK: @modelcontextprotocol/sdk
  • Validation: zod

1. Project Setup

Start by initializing a new TypeScript project. The MCP SDK uses ESM, so make sure your package.json reflects that.

mkdir my-personal-mcp && cd my-personal-mcp
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node tsx

Update your package.json to include "type": "module" and a build script. Your tsconfig.json should target ES2022 or higher.

2. Define Your Data

Create a data.json file. This is where your personal context lives. Storing it as JSON makes it trivial for the MCP server to parse and serve to the LLM.

{
  "bio": "Full-stack developer focused on SaaS and open-source tools.",
  "tech_stack": ["TypeScript", "Next.js", "PostgreSQL", "FastAPI"],
  "projects": [
    {
      "name": "ArbindBuilds",
      "status": "active",
      "description": "A content system for indie makers."
    }
  ]
}

3. The Server Implementation

The core logic happens in src/index.ts. We use McpServer to register a tool. This tool will read our JSON file and return the contents to Claude.

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { readFileSync } from "fs";
import { resolve } from "path";

// 1. Initialize the server
const server = new McpServer({
  name: "personal-context-server",
  version: "1.0.0",
});

// 2. Register the tool
server.tool(
  "get_personal_info",
  "Retrieves bio, projects, and tech stack information about Arbind",
  {}, // No arguments needed for this basic call
  async () => {
    try {
      const dataPath = resolve(process.cwd(), "data.json");
      const data = JSON.parse(readFileSync(dataPath, "utf-8"));
      
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(data, null, 2),
          },
        ],
      };
    } catch (error) {
      return {
        content: [{ type: "text", text: "Error: Could not read personal data." }],
        isError: true,
      };
    }
  }
);

// 3. Connect using stdio transport
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("Personal MCP server running on stdio");
}

main().catch((err) => {
  console.error("Fatal error:", err);
  process.exit(1);
});

4. Integration with Claude Desktop

Claude Desktop looks for a configuration file to know which MCP servers to launch.

Path (macOS): ~/Library/Application Support/Claude/claude_desktop_config.json Path (Windows): %APPDATA%\Claude\claude_desktop_config.json

Add your server to the mcpServers object. Use npx tsx to run your source file directly during development.

{
  "mcpServers": {
    "personal-context": {
      "command": "npx",
      "args": [
        "-y",
        "tsx",
        "/absolute/path/to/your/project/src/index.ts"
      ]
    }
  }
}

Restart Claude Desktop. You should see a small hammer icon or an MCP notification.

Why this matters

The "Personal Assistant" era isn't about better prompting. It's about data locality. By moving your context into an MCP server, you've created a single source of truth that you can update once and use across any MCP-compliant client (Cursor, Windsurf, Claude).

If you want to take this further, add a update_project_status tool to the server. You can then tell Claude, "I just finished the landing page for project X," and Claude will call your tool to update data.json for you.

Don't build features. Build systems that let the AI build features for you.

Ship it.

Arbind Singh

Arbind Singh

ArbindBuilds is my digital space where I showcase my projects, share insightful blogs, and document my work and ideas.

Comments

Leave a comment

0/500 characters

READ NEXT

Lovable Leaks Source Code: The $6.6B BOLA Vulnerability

An 8 million user platform ignored a critical BOLA vulnerability for 48 days. How a $6.6B AI app builder leaked source code, credentials, and user data.

Read →

How 84 Malicious TanStack Packages Hit npm in 6 Minutes

On May 11, 2026, an attacker published 84 malicious versions across 42 @tanstack/* packages in under 6 minutes. Not a typo. Here is the exact chain that made it possible. 42 @tanstack packages compromised via GitHub Actions cache poisoning and OIDC token extraction

Read →

Tagged

mcpclaudeanthropictypescriptnodejsautomationpersonal-assistantdeveloper-toolsindie-makerbuild-log
← Back to Blog