Zum Inhalt springen
MCP ThesaurusMCP Thesaurus

Ask Me

CommunityIncomplete39/100Beanspruchen

streamable-httpMITupdated 12d ago

A persona MCP server. Ask Claude / ChatGPT / Grok about the operator's work, patterns, availability, and offer β€” grounded in their public rΓ©sumΓ©, projects index, and offer page.

QuellcodeWebsiteDocs1

Was kannst du mit Ask Me machen?

ask-me-mcp

A persona MCP server. Ask Claude / ChatGPT / Grok about the operator's work, patterns, availability, and offer β€” grounded in their public rΓ©sumΓ©, projects index, and offer page.

Reference implementation of the MCP-Server Harness pattern. This repo is a working example of the same architecture the operator sells as a productized 6-week engagement. If you like the shape, that's the sales pitch β€” see The pattern at the bottom.

What it does

Six typed tools any AI-assistant user can call:

Tool What it returns
get_current_focus Current allocation, active engagements, and the primary vertical wedge in progress.
get_engagement_summary A specific engagement (NXT Robotics, AIMIA, Hydrostasis, Digital QR Card) described at a public-safe level.
search_reusable_patterns Keyword search over the operator's 12+ reusable engineering-patterns catalog.
check_availability How many Playbook / Retainer slots are open + earliest next-open date.
get_offer_details Current bundled offer: MCP-Server Playbook + Fractional CTO Retainer.
book_discovery_call Instructions + prep guidance for booking a discovery call. Does not auto-schedule. Explicitly refuses to negotiate price.

Every response ships with a confidence label and a source citation. The server never invents; if the grounding data doesn't say it, the server doesn't say it.

Install (as a user)

The remote endpoint speaks MCP Streamable HTTP + OAuth 2.1. Three ways to connect:

1. Claude Desktop β€” connector directory ("Connect" button)

Add via the Claude Desktop UI: Settings β†’ Connectors β†’ Add custom connector β†’ URL: https://ask-me-mcp-xi.vercel.app/api/mcp. Click Connect. The desktop client discovers OAuth metadata, registers as a client, exchanges tokens, and mounts the tools. No manual config.

2. Claude Desktop / Claude Code β€” config file (skip OAuth)

Add to claude_desktop_config.json β€” location varies by OS; see Claude Desktop config docs:

{
  "mcpServers": {
    "ask-me": {
      "url": "https://ask-me-mcp-xi.vercel.app/api/mcp"
    }
  }
}

3. Claude Code CLI

claude mcp add --scope user ask-me https://ask-me-mcp-xi.vercel.app/api/mcp

Local stdio (development)

For local stdio dev (no HTTP, no OAuth β€” auth doesn't apply to stdio):

{
  "mcpServers": {
    "ask-me": {
      "command": "node",
      "args": ["/absolute/path/to/ask-me-mcp/dist/src/server.js"]
    }
  }
}

Then in any Claude Code session:

what's Ilyes's current focus? what patterns has he shipped for LLM evaluation? is he available for a Playbook engagement in October?

Develop (as a maintainer)

Requirements

  • Node.js 20+
  • npm (or pnpm / yarn β€” package.json is npm-first)

Setup

git clone https://github.com/tounsils/ask-me-mcp.git
cd ask-me-mcp
npm install

Run locally as a stdio server

npm run dev

Point Claude Code or the MCP Inspector at the resulting process.

Build for production

npm run build

Outputs to dist/.

Deploy to Vercel

# Set the JWT signing secret (one-time; required for OAuth).
vercel env add MCP_JWT_SECRET production
# Paste a long random string. Generate one: `openssl rand -base64 48`.

vercel deploy --prod

The api/mcp.ts handler serves the Streamable HTTP transport with OAuth 2.1 protection β€” the format Claude's connector directory and ChatGPT's Apps SDK both use. See docs/oauth-flow.md for the full architecture.

Run the eval corpus

npm run eval           # 15 tool cases against handlers directly (no HTTP)
npm run eval:oauth     # 6-step end-to-end OAuth flow (needs MCP_JWT_SECRET)

The tool corpus fails the build if fewer than a threshold percentage of expected answers match. Pass or nothing ships.

The OAuth flow test exercises register β†’ authorize β†’ token β†’ protected /api/mcp β†’ 401 challenge β†’ refresh β€” all in-process against Vercel-shaped mock req/res objects.

Repository layout

ask-me-mcp/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ server.ts               # shared MCP server (used by both stdio + HTTP)
β”‚   β”œβ”€β”€ tools/                  # six typed tool implementations
β”‚   β”‚   β”œβ”€β”€ getCurrentFocus.ts
β”‚   β”‚   β”œβ”€β”€ getEngagementSummary.ts
β”‚   β”‚   β”œβ”€β”€ searchReusablePatterns.ts
β”‚   β”‚   β”œβ”€β”€ checkAvailability.ts
β”‚   β”‚   β”œβ”€β”€ getOfferDetails.ts
β”‚   β”‚   └── bookDiscoveryCall.ts
β”‚   β”œβ”€β”€ grounding/
β”‚   β”‚   β”œβ”€β”€ data.json           # pre-extracted structured facts (v0)
β”‚   β”‚   └── index.ts            # loaders + search helpers
β”‚   └── rails/
β”‚       └── confidence.ts       # confidence + source-citation wrapper; refusal helper
β”‚   └── oauth/                  # OAuth 2.1 + PKCE + anonymous DCR
β”‚       β”œβ”€β”€ config.ts           # issuer, scopes, TTLs, endpoint paths
β”‚       β”œβ”€β”€ jwt.ts              # HS256 sign/verify (via `jose`)
β”‚       β”œβ”€β”€ clientRegistry.ts   # client_id = signed JWT (no DB)
β”‚       └── codeGrant.ts        # auth code + access/refresh token + PKCE S256
β”œβ”€β”€ api/
β”‚   β”œβ”€β”€ mcp.ts                          # Vercel serverless entry (Streamable HTTP + Bearer auth)
β”‚   β”œβ”€β”€ health.ts                       # diagnostic (unauthenticated)
β”‚   β”œβ”€β”€ register.ts                     # RFC 7591 DCR
β”‚   β”œβ”€β”€ authorize.ts                    # authorization endpoint (auto-approves)
β”‚   β”œβ”€β”€ token.ts                        # token exchange with PKCE
β”‚   β”œβ”€β”€ oauth-protected-resource.ts     # RFC 9728 metadata
β”‚   └── oauth-authorization-server.ts   # RFC 8414 metadata
β”œβ”€β”€ eval/
β”‚   β”œβ”€β”€ corpus.json             # 15 tool cases + expected answers
β”‚   β”œβ”€β”€ runner.ts               # replays tool corpus, threshold-gated
β”‚   └── oauth-flow.ts           # 6-step OAuth end-to-end test
β”œβ”€β”€ docs/
β”‚   └── oauth-flow.md           # OAuth architecture + how to swap for real user identity
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ vercel.json
└── README.md

The pattern: the MCP-Server Harness

This project is a reference implementation of a pattern the operator ships to clients as a productized 6-week engagement β€” the MCP-Server Product Playbook.

The shape:

  1. Typed tool contract. Six JSON-schema-strict tools. Nothing free-form. The model can only invoke these, only with these arguments.
  2. Coordinator + specialists (extensible). v0 has one coordinator (the MCP server routing tool calls). v1 will add elicitation + supervisor agents inside more complex tools.
  3. Typed signal vector. Structured facts extracted from the grounding data. Not free-text.
  4. Versioned reasoning specification. The tool implementations ARE the reasoning spec β€” versioned in the code, not in a prompt.
  5. Rails + confidence. Every response carries confidence + sources + optional disclaimers. The model can display them.
  6. External grounding. The server queries src/grounding/data.json; the model never invents.
  7. Evaluation corpus + eval runner + certification. eval/corpus.json has expected answers; npm run eval replays them. Ships or doesn't.

If you're building a product that fits this shape (career guidance, medical triage, legal intake, financial planning, coaching, expert-system anything), the operator sells a 6-week fixed-scope engagement to ship it. See get_offer_details or email tounsils@gmail.com.

License

MIT. See LICENSE.

Attribution

Built by Ilyes Tounsi Β· Carlsbad, CA Β· tounsils.github.io.