Skip to content
MCP ThesaurusMCP Thesaurus

Ask Me

CommunityIncomplete39/100Claim

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.

SourceWebsiteDocs1

What can you do with Ask Me?

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.