trippyogi-mcp
An MCP server that exposes the author's resume as structured data and fact-checks natural-language claims against public receipts, returning verified, partially verified, or not verifiable verdicts.
README
trippyogi-mcp
An MCP server that lets you fact-check my resume.
Most portfolios ask a reviewer to trust a set of claims. This one exposes the underlying work as structured data and gives every claim one of three answers: verified, partially_verified, or not_verifiable.
not_verifiable is intentional. A private production metric or old employer project does not become publicly proven because it appears on a resume.
Tools
| Tool | Returns |
|---|---|
get_projects |
Shipped or publicly inspectable work with source, package, live, and receipt URLs where available. |
get_experience |
Roles, dates, and what was built, aligned to the public resume. |
get_availability |
Current role targets, work modes, and public contact paths. |
verify_claim |
A verdict, supported and unsupported portions, estimate marker, and receipt URLs for a natural-language claim. |
The server is public, stateless, unauthenticated, and read-only. It applies a best-effort in-process rate limit per serverless isolate (not a shared global limiter). Prefer an edge/WAF limit in front of /mcp for production abuse control. It records the tool name and timestamp for each call and never logs tool inputs.
verify_claim matches only normalized canonical claim text or explicit aliases, and fails closed when the query adds unsupported terms or conflicting numbers.
Run it
Requires Node 22 or newer.
npm ci
npm run check
npm test
npm run generate:site
npm run dev
The endpoint is http://localhost:3000/mcp; health is at /health.
Test with the MCP Inspector:
npx @modelcontextprotocol/inspector
Select Streamable HTTP and connect to http://localhost:3000/mcp.
Example
Input:
{
"claim": "Legendari had 673 Kickstarter backers"
}
Output:
{
"verdict": "verified",
"claim": "Legendari had 673 Kickstarter backers",
"matchedClaim": "Legendari was backed by 673 Kickstarter backers who pledged $190,292 against a $125,000 goal.",
"supported": "Kickstarter publicly reports the backer count, pledged amount, and campaign goal.",
"unsupported": null,
"estimate": false,
"evidence": [
{
"label": "Legendari Kickstarter",
"url": "https://www.kickstarter.com/projects/metatravelers/legendari-action-figures",
"kind": "independent"
}
]
}
Content model
content/profile.jsonis the shared source for projects, experience, availability, the Markdown surfaces, and JSON-LD.content/claims.jsonmaps resume claims to receipts and caveats.npm run generate:siteproducessite/llms.txt,site/resume.md,site/projects.md, andsite/person.jsonldfrom the same source.
The natural-language matcher is deterministic. It does not use an LLM, browse at request time, or invent evidence. Numeric conflicts fail closed: asking it to verify 9,000 units will not match a receipt for 7,777.
Deploy
Vercel
- Import this repository as a new Vercel project (framework: Other / null).
- Set
ALLOWED_HOSTSto the deployment hostname plustrippyogi.comandwww.trippyogi.com, comma-separated. - Disable Vercel Authentication on the project — this endpoint is intentionally public.
- Deploy. Production alias:
https://trippyogi-mcp.vercel.app./mcpand/healthare serverless; generated Markdown surfaces are static. - In the existing
trippyogi.comVercel project, add an external rewrite from/mcpto the MCP project's/mcpURL. This keeps the public connector URL on the portfolio domain.
Example rewrite in the portfolio project's vercel.json:
{
"rewrites": [
{
"source": "/mcp",
"destination": "https://trippyogi-mcp.vercel.app/mcp"
}
]
}
Copy the generated files into the portfolio site's public directory so they resolve as /llms.txt, /resume.md, and /projects.md. Add the contents of site/person.jsonld to the homepage in a <script type="application/ld+json"> element.
Container
docker build -t trippyogi-mcp .
docker run --rm -p 3000:3000 \
-e TRUST_PROXY=1 \
-e ALLOWED_HOSTS=trippyogi.com,localhost \
trippyogi-mcp
Put the service behind the same reverse proxy as the portfolio and route /mcp to port 3000. Apply a second edge rate limit there.
Fork it for your own resume
- Replace the person, project, experience, and availability records in
content/profile.json. - Replace every record in
content/claims.json; do not carry over another person's evidence. - Update allowed hosts, package metadata, and JSON-LD.
- Run
npm run checkand inspect all generated files before deploying.
If a claim has no public receipt, keep it and mark it not_verifiable, or remove it. Do not turn a self-authored resume into its own verification source.
Security and privacy
There are no write tools, user records, analytics payloads, or contact-discovery features. See SECURITY.md for the reporting path and design constraints.
MIT licensed. The personal data and claims are examples, not an invitation to impersonate their subject.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。