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/mcpJSON-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"]
}
}
}jsonRequires 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.
evaluateFitMatch 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
searchProjectsFilter 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'
searchBlogSearch 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
getContactInfoEmail, 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 pitchprofile://skills— categorized stack (AI, blockchain, web, mobile, server, db, tools)profile://experience— career timeline, 1996 → presentprofile://projects— signature projects with roles and techprofile://recommendations— testimonials from colleaguesprofile://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. ReturnsprotocolVersion, capabilities, andserverInfo.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-nextjsadapter. - Routing:
middleware.tshandles the/mcpalias (POST → rewrite to/api/mcp; GET → 301 here). - Discovery:
/.well-known/mcp.jsonadvertises the endpoint and tool catalog. The site'sLinkheader includes</api/mcp>; rel="mcp". - Source: github.com/jjanisheck/janisheckcom. Custom JSON-RPC handler — no
@modelcontextprotocol/sdkdependency.
