GoProfiles MCP Server
OfficialGoProfiles MCP Server
An MCP server that exposes GoProfiles as tools for AI assistants. Built with FastMCP.
Hosted HTTP Mode
This server is intended to run as a hosted remote MCP server over Streamable HTTP.
Public endpoint shape:
https://mcp.goprofiles.io/mcpLocal development endpoint shape:
http://localhost:8000/mcpAuthentication
The hosted server does not use a shared GOPROFILES_API_TOKEN.
MCP clients should send a per-user GoProfiles OAuth/API bearer token with each request:
Authorization: Bearer YOUR_TOKENThe MCP server forwards that header to the configured GoProfiles API
(GOPROFILES_API_URL, default https://api.goprofiles.io). GoProfiles remains responsible for token validation, scope enforcement, refresh, storage, and revocation.
An OAuth client must be pre-registered in your GoProfiles workspace with:
Allowed scopes:
profiles:read,profiles:write,search:read,users:read,bravos:read,bravos:writeRedirect URIs: the exact callback URL(s) your MCP client uses
Local Development
This project uses Python 3.12 and uv.
Install Python
3.12.Install
uv.Create the local environment and install dependencies:
uv syncPoint the server at your GoProfiles sandbox API (not production). Copy the example env file and replace
<your-username>with your dev path:
cp .env.example .envSee .env.example for every supported variable. .env is
gitignored and must not be committed. Without a local .env, the server
defaults to https://api.goprofiles.io.
Run the MCP server locally:
uv run python -m goprofiles_mcpConfirm startup prints your sandbox base, e.g.
GoProfiles API base: https://dev.goprofiles.io/d/<you>/d/api.
The server binds to 0.0.0.0:8000 by default. Override with MCP_HOST and MCP_PORT if you need a different host or port:
MCP_HOST=127.0.0.1 MCP_PORT=9000 uv run python -m goprofiles_mcpVerify health and OAuth discovery:
curl http://localhost:8000/health
curl http://localhost:8000/.well-known/oauth-authorization-serverTest on ChatGPT
ChatGPT cannot reach localhost. Expose your local MCP server with a public HTTPS tunnel (ngrok), then add it as a custom connector.
Start the MCP server locally (see Local Development) so it is listening on port
8000.Install ngrok (macOS example):
brew install ngrokSign up at ngrok.com, copy your authtoken, and configure the agent:
ngrok config add-authtoken YOUR_AUTHTOKENIn a separate terminal, tunnel port
8000:
ngrok http 8000Copy the HTTPS forwarding URL ngrok prints (for example
https://abc123.ngrok-free.app) and append/mcp:
https://abc123.ngrok-free.app/mcpConfirm the tunnel reaches your server:
curl -i https://abc123.ngrok-free.app/healthIn ChatGPT: Settings → Connectors, enable Developer Mode, then create a connector and paste the
/mcpURL from step 5.
Notes
Keep both the MCP server and the ngrok process running while you test.
/mcprequires a Bearer token. Full ChatGPT OAuth login needs working GoProfiles authorize/token endpoints; without that, the connector may reach the URL but fail authentication.A successful connect lists the tools in the Tools table below.
Docker
Build and run locally:
docker build -t goprofiles-mcp .
docker run --rm -p 8000:8000 goprofiles-mcpTools
Tool modules live under src/goprofiles_mcp/tools/ and are registered in src/goprofiles_mcp/server.py. Copy tools/_template.py when adding a new one.
Tool | Description | Scope |
| Search and filter the people directory by name, department, title, location, language, skill, interest, and group. Resolves a name to the |
|
| Full profile for one |
|
| Recent and upcoming birthdays, work anniversaries, and new hires in one merged feed, filterable by type and day window. |
|
| Whether one |
|
| History of bravos already given, newest first, filterable by day window, person (giver or receiver), and giver/receiver department. Returns badge, when it was given, giver, receiver, points, and message. |
|
| The catalog of badge types that can be given, each with the |
|
| Resolves a recipient and badge and returns a preview for the user to approve. Stages the send but sends nothing. |
|
| Sends the Bravo the user approved from |
|
| Create a staged calendar invite the user has explicitly approved. Organizer is the authenticated user. Irreversible — the event lands on both calendars and the invite is emailed. |
|