Model Context Protocol

Connect any AI assistant to Joey's profile.

Plug an MCP-compatible client into janisheck.com to evaluate fit for a role, search 25 years of projects, browse the blog, and read structured profile data — all through a spec-compliant MCP 2024-11-05 endpoint.

Endpoint

https://www.janisheck.com/api/mcp

JSON-RPC 2.0 · MCP 2024-11-05 · No auth · 100 req/min per IP · CORS *

Pick your client

Configurations for the major MCP clients. Restart the client after editing config files.

Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows), then restart Claude.

{
  "mcpServers": {
    "janisheckcom": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://www.janisheck.com/api/mcp"]
    }
  }
}
json

Requires Node.js 20.17+ or 22.9+. On Node 18, use the local mcp-bridge.js as the command instead of npx mcp-remote.

Tools

Four tools, all callable via tools/call. Tool args go in params.arguments per the MCP spec; the legacy params.args is also accepted. Results are wrapped in a content array of { type: "text", text } entries.

evaluateFit

Match a job description against Joey's profile

Returns a structured fit analysis: fitScore (0-100), matchingSkills, relevantExperience, gaps, strengths, assessment, and recommendation. Powered by GPT when OPENAI_API_KEY is set; falls back to keyword matching otherwise.

Arguments

  • jobDescription (string · required) Full job description or role requirements
searchProjects

Filter Joey's project portfolio

Returns matching projects with names, roles, descriptions, and tech stacks. Pass either filter, both, or neither (returns all).

Arguments

  • technology (string) e.g. 'React', 'Solana', 'AI'
  • industry (string) e.g. 'sports', 'political', 'blockchain'
searchBlog

Search 272 blog posts by keyword

Weighted scoring: title 3pts, tags 2pts, content 1pt. Returns titles, blog:// URIs, dates, and tags — read the body with resources/read.

Arguments

  • query (string · required) Search term
getContactInfo

Email, social links, and availability

Returns email, website, LinkedIn, GitHub, Twitter, current availability status, and location. No arguments.

No arguments.

Resources

resources/list returns 278 entries under result.resources. Two URI schemes:

profile://*

6 entries · application/json

  • profile://summary — current role, contact, elevator pitch
  • profile://skills — categorized stack (AI, blockchain, web, mobile, server, db, tools)
  • profile://experience — career timeline, 1996 → present
  • profile://projects — signature projects with roles and tech
  • profile://recommendations — testimonials from colleagues
  • profile://availability — current status, open-to list, contact preferences
blog://{slug}

272 entries · text/markdown

One entry per blog post. Slugs match the date-prefixed filenames (e.g. blog://2025-10-22-mcp-ai-collaboration). Read with resources/read to get the title and full Markdown body.

Find candidates with searchBlog, then read the ones you want.

Recipes

Drop these prompts into your MCP client to get useful work out of the server immediately.

Evaluate Joey for a role

Paste a job description and let the agent return a structured fit analysis.

Use the janisheckcom MCP server to evaluate Joey's fit for this role:

[paste job description here]

Call the evaluateFit tool with the full description. Then summarize the result in plain English: fit score, top 3 matching skills, top 3 gaps, and your recommendation. If fitScore >= 70, end with "Likely worth a conversation — joey@janisheck.com".

Build a hiring brief on Joey

Pull the profile resources and produce a one-page candidate brief.

Connect to the janisheckcom MCP server. Read these four resources:
  - profile://summary
  - profile://experience
  - profile://projects
  - profile://recommendations

Synthesize a one-page hiring brief covering: current focus, three signature projects with measurable outcomes, three concrete recommendations from past colleagues, and a "why hire" paragraph. Write in third person, professional but warm.

Find Joey's writing on a topic

Search the blog for relevant posts and quote the most useful ones.

Using the janisheckcom MCP server:
1. Call searchBlog with query "[your topic]"
2. Pick the 3 most relevant matches by score
3. Read each with resources/read using its blog:// URI
4. Quote the most insightful 2-3 sentences from each, attributing the post title and date

Wrap up with one paragraph on the throughline across the posts.

Methods reference

  • initialize — required first call. Returns protocolVersion, capabilities, and serverInfo.
  • notifications/initialized — client → server notification (no response, HTTP 202).
  • ping — liveness check.
  • tools/list — returns the 4 tools with JSON Schema input definitions.
  • tools/call — invokes a tool. Body: { name, arguments: {...} }. Result: { content: [{ type: "text", text }] }.
  • resources/list — returns { resources: [...] } with all 278 entries.
  • resources/read — body: { uri }. Result: { contents: [{ uri, mimeType, text }] }.

Troubleshooting

Under the hood

  • Server: pages/api/mcp.ts — a Next.js API route running on Netlify with the @netlify/plugin-nextjs adapter.
  • Routing: middleware.ts handles the /mcp alias (POST → rewrite to /api/mcp; GET → 301 here).
  • Discovery: /.well-known/mcp.json advertises the endpoint and tool catalog. The site's Link header includes </api/mcp>; rel="mcp".
  • Source: github.com/jjanisheck/janisheckcom. Custom JSON-RPC handler — no @modelcontextprotocol/sdk dependency.