![mymlh-mcp-server](https://socialify.git.ci/wei/mymlh-mcp-server/image?description=1&font=Bitter&logo=https%3A%2F%2Fstatic.mlh.io%2Fbrand-assets%2Flogo%2Fofficial%2Fmlh-logo-color.svg&name=1&theme=Light) [![Remote HTTP MCP Server](https://img.shields.io/badge/MCP-Streamable_HTTP-000000?logo=modelcontextprotocol&logoColor=white)](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports) [![Built for MyMLH](https://img.shields.io/badge/Built_for-MyMLH-E73427?logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIGlkPSJMYXllcl8xIiB4PSIwIiB5PSIwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMjgwIDQ4MC43NCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTI4MCA0ODAuNzQiPjxzdHlsZT4uc3Qwe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I2ZmZn08L3N0eWxlPjxwYXRoIGlkPSJTaGFwZV8wMDAwMDAzMzMzOTA1MDQ4NDMzMDU1ODk5MDAwMDAwNjAxOTE2MzA0MDkwNTA5Nzg4NF8iIGQ9Ik00MTYuNDUgMzIuOThjOC4yOCAzLjYgMTUuNDggOC42NCAyMS42IDE0Ljc2IDYuMTIgNi4xMiAxMC44IDEzLjMyIDE0Ljc2IDIxLjYgMy42IDguMjggNS40IDE3LjI4IDUuNCAyNi42NHYzNDEuMjdjMCAzLjI0LTEuMDggNS43Ni0zLjI0IDcuOTJzLTQuNjggMy4yNC03LjkyIDMuMjRoLTgxLjcyYy0zLjI0IDAtNS43Ni0xLjA4LTcuNTYtMy4yNHMtMi44OC00LjY4LTIuODgtNy45MlYxMjYuOTNoLTY1Ljg4djMxMC4zMWMwIDMuMjQtMS4wOCA1Ljc2LTIuODggNy45MnMtNC42OCAzLjI0LTcuNTYgMy4yNGgtNzQuMTZjLTMuMjQgMC01Ljc2LTEuMDgtNy45Mi0zLjI0cy0zLjI0LTQuNjgtMy4yNC03LjkyVjEyNi45M2gtNjUuODh2MzEwLjMxYzAgNy41Ni0zLjYgMTEuMTYtMTEuMTYgMTEuMTZoLTgxYy03LjU2IDAtMTEuMTYtMy42LTExLjE2LTExLjE2VjM4Ljc0YzAtNy41NiAzLjYtMTEuMTYgMTEuMTYtMTEuMTZoMzU0LjIzYzkuNzMgMCAxOC4zNyAxLjggMjcuMDEgNS40eiIgY2xhc3M9InN0MCIvPjxwYXRoIGlkPSJTaGFwZV8wMDAwMDE2NTkzNzc4NTYzNDc0MjEzMDgxMDAwMDAwMzU1ODM2MzY0NzQ2NjQ1OTU0M18iIGQ9Ik04MTQuMjMgMzQ2LjE3YzMuMjQgMCA2LjEyIDEuMDggNy45MiAzLjI0IDIuMTYgMi4xNiAzLjI0IDUuMDQgMy4yNCA4LjI4djc5LjU2YzAgMy4yNC0xLjA4IDUuNzYtMy4yNCA4LjI4LTIuMTYgMi4xNi00LjY4IDMuMjQtNy45MiAzLjI0SDUzNC41MmMtNy45MiAwLTExLjg4LTMuOTYtMTEuODgtMTEuNTJWMzkuMWMwLTcuNTYgMy45Ni0xMS41MiAxMS44OC0xMS41Mmg4NS42OGM3LjkyIDAgMTEuODggMy45NiAxMS44OCAxMS41MnYyOTYuNjNjMCAzLjI0IDEuMDggNS43NiAzLjYgNy45MiAyLjE2IDIuMTYgNS4wNCAyLjg4IDguMjggMi44OGgxNzAuMjd2LS4zNnoiIGNsYXNzPSJzdDAiLz48cGF0aCBpZD0iU2hhcGVfMDAwMDAxMDM5NTIxOTc1MzE2MzEzMjUyOTAwMDAwMDUxOTk2NzQ2NzgxNDM5NDUxNDRfIiBkPSJNMTI0NC4wNSAyNy41OGMzLjI0IDAgNi4xMiAxLjA4IDguMjggMy4yNCAyLjE2IDIuMTYgMy42IDUuMDQgMy42IDguMjh2Mzk5LjIyYzAgMy4yNC0xLjA4IDUuNzYtMy42IDguMjgtMi4xNiAyLjE2LTUuMDQgMy4yNC04LjI4IDMuMjRoLTg3LjEyYy0zLjI0IDAtNi4xMi0xLjA4LTguMjgtMy4yNC0yLjE2LTIuMTYtMy42LTUuMDQtMy42LTguMjhWMjk5LjAxYzAtMy4yNC0xLjA4LTUuNzYtMy4yNC03Ljkycy00LjY4LTIuODgtOC4yOC0yLjg4SDEwMTEuNWMtMy4yNCAwLTYuMTIgMS4wOC04LjI4IDIuODgtMi4xNiAyLjE2LTMuNiA0LjY4LTMuNiA3LjkydjEzOS4zMWMwIDcuNTYtMy45NiAxMS41Mi0xMS44OCAxMS41MmgtODYuNGMtNy45MiAwLTExLjg4LTMuOTYtMTEuODgtMTEuNTJWMzkuMWMwLTcuNTYgMy45Ni0xMS41MiAxMS44OC0xMS41Mmg4Ni40YzcuOTIgMCAxMS44OCAzLjk2IDExLjg4IDExLjUydjEzNC45OWMwIDcuNTYgMy45NiAxMS41MiAxMS44OCAxMS41MmgxMjIuMDNjMy4yNCAwIDYuMTItMS4wOCA4LjI4LTMuMjQgMi4xNi0yLjE2IDMuMjQtNS4wNCAzLjI0LTguMjhWMzkuMWMwLTMuMjQgMS4wOC01Ljc2IDMuNi04LjI4IDIuMTYtMi4xNiA1LjA0LTMuMjQgOC4yOC0zLjI0aDg3LjEyeiIgY2xhc3M9InN0MCIvPjwvc3ZnPg==)](https://www.mlh.com/) [![Cloudflare Workers](https://img.shields.io/badge/Cloudflare-Workers-F38020?logo=cloudflare&logoColor=white)](https://developers.cloudflare.com/workers/) [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Built with Hono](https://img.shields.io/badge/Built_with-Hono-E36002?logo=hono&logoColor=white)](https://hono.dev/) [![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)](https://wei.mit-license.org) [![CI](https://github.com/wei/mymlh-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/wei/mymlh-mcp-server/actions/workflows/ci.yml) A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/2026-07-28/getting-started/intro) server that provides secure, OAuth-authenticated access to [MyMLH](https://www.mlh.com/). This server enables AI assistants and MCP clients to interact with the MyMLH API on behalf of users. ## Features - **Secure Authentication**: Implements [MyMLH API v4 with OAuth](https://www.mlh.com/developers/docs) for robust and secure user authentication. - **User Data Access**: Provides tools to fetch a user's MyMLH profile, education, employment history, and more. - **Automatic Token Management**: Handles token refresh and secure storage automatically. - **Cloudflare Workers**: Built to run on the edge for low-latency, scalable performance. - **Easy Deployment**: Can be deployed to your own Cloudflare account in minutes. ## Quick Start You can connect to our publicly hosted instance using any MCP client that supports the [Streamable HTTP transport with OAuth](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization). **Endpoint**: `https://mymlh-mcp.git.ci/mcp` ### Add MCP Server [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_MCP-0098FF)](https://insiders.vscode.dev/redirect/mcp/install?name=mymlh&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmymlh-mcp.git.ci%2Fmcp%22%7D) [![Install in Cursor](https://img.shields.io/badge/Cursor-Install_MCP-000000)](https://cursor.com/en/install-mcp?name=mymlh&config=eyJ1cmwiOiJodHRwczovL215bWxoLW1jcC5naXQuY2kvbWNwIn0%3D) Example configuration snippets for common MCP clients: **VS Code:** ```json { "servers": { "mymlh": { "type": "http", "url": "https://mymlh-mcp.git.ci/mcp" } } } ``` **Cursor and many clients:** ```json { "mcpServers": { "mymlh": { "url": "https://mymlh-mcp.git.ci/mcp" } } } ``` **Windsurf and many clients:** ```json { "mcpServers": { "mymlh": { "serverUrl": "https://mymlh-mcp.git.ci/mcp" } } } ``` **Augment Code:** ```json { "mcpServers": { "mymlh": { "url": "https://mymlh-mcp.git.ci/mcp", "type": "http" } } } ``` **Claude Code:** ```sh claude mcp add --transport http mymlh https://mymlh-mcp.git.ci/mcp ``` **Gemini CLI:** ```sh gemini mcp add --transport http mymlh https://mymlh-mcp.git.ci/mcp ``` **Codex CLI:** ```sh codex mcp add mymlh --url https://mymlh-mcp.git.ci/mcp ``` **Cline:** ```json { "mcpServers": { "mymlh": { "type": "streamableHttp", "url": "https://mymlh-mcp.git.ci/mcp" } } } ``` **Other clients:** Consult your client's documentation for connecting to an MCP server. If you see 401 errors, the client likely does not support [Streamable HTTP with OAuth](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization) and you will need to use the fallback option below. ### Fallback Option For environments where Streamable HTTP with OAuth is not supported, you may fall back to stdio transport with [`mcp-remote`](https://www.npmjs.com/package/mcp-remote). This wraps the HTTP MCP server into a local stdio interface, forwarding requests over HTTP behind the scenes to ensure compatibility. Example `mcp-remote` configuration snippet: ```json { "mcpServers": { "mymlh": { "command": "npx", "args": [ "mcp-remote", "https://mymlh-mcp.git.ci/mcp" ] } } } ``` See [`mcp-remote` documentation](https://www.npmjs.com/package/mcp-remote#usage) for more details on usage. ## Available Tools Once connected and authenticated, you can use the following tools: | Tool | Description | | ---------------- | -------------------------------- | | `mymlh_get_user` | Fetch current MyMLH user profile | ### Test with MCP Inspector You can test the remote MCP server using the [Model Context Protocol Inspector](https://modelcontextprotocol.io/docs/tools/inspector). 1. Run the Inspector from your terminal: ```bash npx @modelcontextprotocol/inspector@latest ``` 2. Enter the server URL: `https://mymlh-mcp.git.ci/mcp` and click "Connect". 3. Follow the authentication flow to connect and test the tools. ### Testing with Cloudflare AI Playground You can also test the server directly using the [Cloudflare Workers AI LLM Playground](https://playground.ai.cloudflare.com/). 1. Go to the playground link. 2. Enter the server URL: `https://mymlh-mcp.git.ci/mcp` 3. Follow the authentication flow to connect and test the tools. ### Example Usage You can interact with the MyMLH MCP server using natural language in your AI assistant: - "Get my MyMLH user info." - "Show me my MyMLH profile." - "Generate a resume using my MyMLH profile." - "Create a GitHub profile README using my MyMLH data." ## Deploying Your Own Instance For full control, you can deploy your own instance to Cloudflare. See the [Deployment Guide](DEPLOYMENT.md) for detailed instructions. ## Contributing We welcome contributions! Whether you're fixing a bug, adding a feature, or improving documentation, your help is appreciated. For development setup, project structure, how to add tools, and contributing guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md). ## License [MIT](https://wei.mit-license.org)