Skip to main content
Glama
utkarsh21123

about-utkarsh-mcp

by utkarsh21123

about-utkarsh-mcp

An MCP (Model Context Protocol) server that exposes information about Utkarsh — bio, skills, work experience, and portfolio projects — to any MCP-compatible client (Claude, Claude Code, ChatGPT, Codex, etc.).

It ships two transports from one shared server implementation:

Transport

File

Used by

stdio

src/transports/stdio.ts

Local clients that launch the server as a subprocess: Claude Desktop, Claude Code, Codex CLI

Streamable HTTP (remote)

src/transports/http.ts

Remote clients that connect over a URL: ChatGPT connectors, remote Claude/Claude Code, any HTTP-based MCP client

The remote HTTP transport is protected with OAuth 2.0, including Dynamic Client Registration (DCR, RFC 7591) — so a new MCP client can self-register and connect without any manual "create an API key" step, exactly as the MCP Authorization spec expects for remote servers.

Live deployment: https://about-utkarsh-mcp.onrender.com/mcp Repo: https://github.com/utkarsh21123/about-utkarsh-mcp

Architecture

src/
  data/profile.ts        # Single source of truth: bio, skills, experience, projects
  mcpServer.ts            # Shared MCP server: tools + one resource, used by both transports
  transports/
    stdio.ts               # Local subprocess transport
    http.ts                 # Remote Streamable HTTP transport (OAuth-protected)
  oauth/
    store.ts                # In-memory client/auth-code store
    router.ts               # DCR, authorize (PKCE), token, discovery metadata endpoints

MCP tools exposed

  • get_bio — name, title, location, experience summary, links

  • get_skills — skills by category (languages/frontend/backend/databases/infra/spoken)

  • get_experience — work history

  • list_projects — all portfolio projects (summary)

  • get_project_details — full detail for one named project

  • get_contact — how to reach out

Plus one resource: profile://utkarsh/full (the whole profile as JSON).

OAuth / DCR flow (remote HTTP transport)

  1. Client discovers the server via GET /.well-known/oauth-protected-resource (RFC 9728) and GET /.well-known/oauth-authorization-server (RFC 8414).

  2. Client dynamically registers itself: POST /register (RFC 7591) — no pre-shared client id/secret needed.

  3. Client runs the standard Authorization Code + PKCE flow: GET /authorize (a one-click "Approve" page — there's no personal login here, just consent to read a public profile) → POST /token.

  4. Client calls POST/GET/DELETE /mcp with Authorization: Bearer <token>.

This was verified end-to-end (registration → authorize → token exchange → authenticated initialize and tools/call) both locally and against the live Render deployment.


Related MCP server: Developer Portfolio MCP Server

Running it locally — full step by step

Prerequisites

  • Node.js 18+ (tested on Node 22) and npm

  • git

  • curl (for manual testing) — optional but recommended

1. Clone and install

git clone https://github.com/utkarsh21123/about-utkarsh-mcp.git
cd about-utkarsh-mcp
npm install

2. Build

npm run build

This compiles src/ (TypeScript) to dist/ (JavaScript) via tsc. Re-run this any time you edit a .ts file — the running server uses the compiled dist/ output.

3a. Run the stdio server (local client mode)

npm run start:stdio

You should see, on stderr (not stdout — stdout is reserved for the MCP JSON-RPC protocol):

about-utkarsh-mcp: stdio server ready

It's now waiting for a client to talk to it over stdin/stdout. Two ways to test:

Option A — connect a real client. Add this to Claude Desktop's claude_desktop_config.json or Claude Code's .mcp.json:

{
  "mcpServers": {
    "about-utkarsh": {
      "command": "node",
      "args": ["/absolute/path/to/about-utkarsh-mcp/dist/transports/stdio.js"]
    }
  }
}

Or with the Claude Code CLI:

claude mcp add about-utkarsh -- node /absolute/path/to/about-utkarsh-mcp/dist/transports/stdio.js

Restart the client, then ask it something like "What are Utkarsh's skills?" and confirm it invokes a tool (not just answers from general knowledge).

Option B — manual JSON-RPC test, no client needed:

printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_bio","arguments":{}}}\n' | node dist/transports/stdio.js

You should get back an initialize response followed by a tools/call result containing your bio as JSON.

3b. Run the HTTP server (remote client mode)

npm run start:http

Defaults to port 3000. You'll see:

about-utkarsh-mcp: HTTP server listening on port 3000
  MCP endpoint:     http://localhost:3000/mcp
  OAuth discovery:  http://localhost:3000/.well-known/oauth-authorization-server
  Auth required:    true

To test without dealing with OAuth first (useful while developing):

REQUIRE_AUTH=false npm run start:http
curl -s -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

4. Full local test of the OAuth/DCR flow

With the server running (REQUIRE_AUTH=true, the default), in a second terminal:

URL=http://localhost:3000

# 1. Health check
curl -s $URL/health

# 2. Discovery metadata
curl -s $URL/.well-known/oauth-authorization-server
curl -s $URL/.well-known/oauth-protected-resource

# 3. Confirm auth is enforced (expect 401)
curl -s -i -X POST $URL/mcp -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -6

# 4. Dynamic Client Registration
REG=$(curl -s -X POST $URL/register -H "Content-Type: application/json" -d '{
  "client_name": "Test Client",
  "redirect_uris": ["https://client.example.com/callback"],
  "token_endpoint_auth_method": "none"
}')
echo "$REG"
CLIENT_ID=$(echo "$REG" | node -e "process.stdin.on('data',d=>console.log(JSON.parse(d).client_id))")

# 5. PKCE challenge/verifier
VERIFIER=$(node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))")
CHALLENGE=$(node -e "console.log(require('crypto').createHash('sha256').update('$VERIFIER').digest('base64url'))")

# 6. Authorize + approve (simulates clicking "Approve" in the browser)
LOC=$(curl -s -o /dev/null -w '%{redirect_url}' "$URL/authorize/approve?client_id=$CLIENT_ID&redirect_uri=https://client.example.com/callback&state=xyz&code_challenge=$CHALLENGE&code_challenge_method=S256")
CODE=$(node -e "console.log(new URL('$LOC').searchParams.get('code'))")

# 7. Exchange code for token
TOKEN_RESP=$(curl -s -X POST $URL/token -H "Content-Type: application/json" \
  -d "{\"grant_type\":\"authorization_code\",\"code\":\"$CODE\",\"redirect_uri\":\"https://client.example.com/callback\",\"client_id\":\"$CLIENT_ID\",\"code_verifier\":\"$VERIFIER\"}")
echo "$TOKEN_RESP"
ACCESS_TOKEN=$(echo "$TOKEN_RESP" | node -e "process.stdin.on('data',d=>console.log(JSON.parse(d).access_token))")

# 8. Authenticated MCP call
curl -s -i -X POST $URL/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Expect a 200 OK on the last call with an mcp-session-id header and the server's initialize payload in the body.

5. (Optional) Develop without rebuilding each time

npm run dev:stdio   # tsx, runs src/transports/stdio.ts directly
npm run dev:http    # tsx, runs src/transports/http.ts directly

These use tsx to run the TypeScript source directly — no npm run build step needed between edits.


Deployment (remote HTTP server)

The included Dockerfile builds a production image; render.yaml is a one-click blueprint for Render, but this deploys the same way on Railway, Fly.io, or any container host.

  1. Push this repo to GitHub.

  2. On Render: New → Blueprint, point it at the repo — render.yaml configures everything (including generating a random JWT_SECRET).

  3. Once deployed, set PUBLIC_BASE_URL to the assigned https://<app>.onrender.com URL in the service's environment settings and it'll redeploy automatically, so OAuth metadata advertises the correct absolute URLs.

  4. Your MCP endpoint is https://<app>.onrender.com/mcp.

Note on the free tier: Render's free instances spin down after a period of inactivity and take up to ~50 seconds to spin back up on the next request. If you need consistently fast/always-on responses, upgrade the Render service to a paid instance type.

Any other Docker host (Railway, Fly.io, a VPS, etc.)

docker build -t about-utkarsh-mcp .
docker run -p 3000:3000 \
  -e JWT_SECRET=$(node -e "console.log(require('crypto').randomBytes(48).toString('hex'))") \
  -e PUBLIC_BASE_URL=https://your-deployed-domain.example.com \
  about-utkarsh-mcp

Connecting clients

Claude Desktop / Claude Code (local, stdio)

See step 3a above.

Claude (remote, HTTP + OAuth)

In Claude's connector settings, add a custom connector pointing at:

https://about-utkarsh-mcp.onrender.com/mcp

Claude auto-discovers the OAuth metadata, registers itself via DCR, and walks you through the one-click approval — no manual credentials required.

ChatGPT (connectors / remote MCP)

Same idea: add a custom connector pointing at the same /mcp URL. ChatGPT performs the same discovery → DCR → OAuth flow.

Codex

  • Codex CLI (local): same config as Claude Code, pointing at node dist/transports/stdio.js.

  • Codex web/cloud (remote): use the deployed /mcp URL as above.

Notes on the OAuth implementation

  • Storage for registered clients/auth codes is in-memory (src/oauth/store.ts) — fine for an assessment/demo; swap in a real database for production so registrations survive restarts and multiple instances.

  • Access tokens are short-lived HS256 JWTs (1 hour). There's no user login screen because the "resource" being protected is a public profile with no per-user data — the approval screen exists to satisfy the OAuth consent step the MCP spec expects, not to gate a private account.

  • PKCE (RFC 7636) is enforced for public clients (token_endpoint_auth_method: none), which is what DCR-registered MCP clients typically use.

Keeping the data current

Everything the tools return lives in src/data/profile.ts. Update that file, npm run build, and redeploy to change what the server tells clients about Utkarsh.

Available Tools

6 tools
get_bioA

Get Utkarsh's high-level bio: name, title, location, years of experience, summary, and profile links.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the returned fields (name, title, location, years of experience, summary, profile links), which is sufficient for a simple read-only tool. No contradictions or hidden behaviors are indicated.

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, well-structured sentence that front-loads the purpose. Every word contributes to clarity with no unnecessary information.

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

Completeness4/5

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

Given no output schema, the description effectively lists the returned content. The sibling tools are named, but their relationships are not elaborated. Overall, it is complete for the tool's simplicity.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is 100%. The description adds no parameter information (none needed). Baseline is 4 for no parameters, and the description is adequate.

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

Purpose5/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 the resource 'Utkarsh's high-level bio', listing specific fields like name, title, location, years of experience, summary, and profile links. It effectively distinguishes from sibling tools (get_skills, get_experience, etc.) which focus on different aspects.

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

Usage Guidelines3/5

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

The description implies usage for retrieving high-level bio information, but lacks explicit guidance on when to use this tool vs alternatives (e.g., when to use get_skills instead). No when-not or exclusion criteria are mentioned.

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

get_contactA

Get ways to find or contact Utkarsh (GitHub, Docker Hub, and general contact guidance).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It identifies the tool as a read operation (retrieving data), but does not mention side effects, permission needs, or data limitations.

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, front-loaded sentence with no extraneous words, efficiently conveying the tool's purpose.

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

Completeness5/5

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

Given zero parameters, no output schema, and low complexity, the description fully covers the tool's functionality and suffices for agent selection.

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

Parameters4/5

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

The input schema has no parameters, and schema coverage is 100%. The description compensates by detailing what the tool returns (contact methods).

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

Purpose5/5

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

The description clearly states the tool retrieves contact methods (GitHub, Docker Hub, guidance) for Utkarsh, distinguishing it from sibling tools like get_bio or get_skills.

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

Usage Guidelines4/5

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

The description implies this tool is for contact info, but does not explicitly state when to use it over alternatives or when not to use it.

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

get_experienceA

Get Utkarsh's professional work experience: organizations, roles/focus areas, and details of the work done.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided; description does not disclose any behavioral traits such as read-only nature, auth requirements, or data freshness. Only a brief output description.

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?

Single sentence, concise, no fluff. Clearly communicates what the tool does.

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

Completeness4/5

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

Adequate for a simple get tool with no output schema; covers key output elements. Minor lack of detail on output structure or potential limits.

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

Parameters4/5

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

No parameters exist; schema coverage is trivial. Description does not need to add param meaning. Baseline 4 for zero-parameter tools.

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

Purpose5/5

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

The description clearly states the tool retrieves professional work experience, specifying organizations, roles, and details. It distinguishes from siblings like get_bio and get_skills.

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 on when to use this tool versus alternatives (e.g., when to get experience vs bio or projects). No context-specific recommendations.

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

get_project_detailsA

Get full details for one of Utkarsh's projects by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name, e.g. 'Fenrir Research' or 'job-autopilot'. Case-insensitive, partial match allowed.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided; the description is minimal and does not disclose behavioral traits like read-only nature, authorization needs, or that 'full details' entails. The partial match behavior is only in the schema, not the description.

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, front-loaded sentence with no wasted words, efficiently conveying the tool's purpose.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description adequately states the input and action, though it lacks detail on the output format.

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 the parameter. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/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 the resource 'full details for one of Utkarsh's projects', distinguishing it from sibling tools like 'list_projects' which list all projects.

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

Usage Guidelines3/5

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

The description implies using the project name to get details, but does not explicitly state when to use this tool over alternatives, such as first using 'list_projects' to find names.

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

get_skillsA

Get Utkarsh's technical skills, grouped by category (languages, frontend, backend, databases, infra, spoken languages).

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional: return only one category. Defaults to 'all'.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description bears full burden. It states basic behavior (grouped by category) but does not disclose additional traits such as caching, rate limits, or permissions. For a simple read operation, this is adequate but not thorough.

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 sentence, front-loaded with the verb and resource. Every word is necessary, with no wasted text.

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

Completeness4/5

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

Given the simplicity of the tool (one optional parameter, no nested objects, no output schema), the description suffices. It could optionally describe the output structure, but it's not necessary for 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?

The input schema has 100% coverage with an enum and description for the optional parameter. The description's mention of categories aligns with the schema, adding minimal extra value, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'technical skills', and specifies grouping by category. It distinguishes from sibling tools like get_bio and get_experience, which cover other aspects of Utkarsh's profile.

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

Usage Guidelines3/5

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

The description implies usage when skills are needed but provides no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites.

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

list_projectsA

List Utkarsh's notable side/portfolio projects with a short description and tech stack for each.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as rate limits, authentication needs, or ordering. The tool is simple and read-only, but some context (e.g., if results are sorted) would be helpful.

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 concise sentence that is front-loaded and contains no superfluous information.

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

Completeness4/5

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

Given no parameters, no output schema, and simple functionality, the description adequately specifies the output's content. It could mention if there is a fixed list, but it is largely complete.

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

Parameters4/5

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

There are no parameters, so the description adds meaning beyond the schema by specifying the content (notable side/portfolio projects) and what is included (description, tech stack). This fully compensates for the lack of parameters.

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

Purpose5/5

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

The description clearly states the tool lists 'Utkarsh's notable side/portfolio projects' with description and tech stack, using a specific verb 'list' and resource. It distinguishes from siblings like get_experience and get_project_details.

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

Usage Guidelines3/5

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

The description implies usage for getting an overview of side projects but provides no explicit guidance on when to use this tool versus siblings, nor any exclusions or prerequisites.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool retrieves a distinct piece of information (bio, skills, experience, projects, project details, contact) with no overlap in purpose, making selection unambiguous.

Naming Consistency5/5

All tools follow a consistent 'get_' + noun pattern (e.g., get_bio, get_skills), providing a predictable and clear naming convention.

Tool Count5/5

Six tools is well-scoped for a personal profile server, covering all key areas without being excessive or insufficient.

Completeness5/5

The tool set fully covers the domain of a personal portfolio: biography, skills, experience, projects (with details), and contact information, with no obvious gaps.

Maintenance

ActivitySlowing
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

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides a structured API for AI agents to query a person's resume, including profile, projects, writing, and gated access to experience and skills.
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides unified access to one's professional profile, including experience, publications, career timeline, and social media presence.
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    B
    maintenance
    A personal MCP server that exposes your profile (bio, skills, projects, work experience) as structured tools for any MCP-compatible AI client, secured with OAuth 2.1 and Dynamic Client Registration.

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/utkarsh21123/about-utkarsh-mcp'

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