MCP server exposing UF NaviGator AI as Claude Code tools
UF NaviGator MCP Server
An MCP server that exposes UF NaviGator AI — the University of Florida's OpenAI-compatible AI API — as tools for Claude Code, Claude Desktop, or any MCP client.
Community project — not officially maintained by UF IT. Requires a valid NaviGator API key.
Disclaimer: This is a personal project provided as-is. Most of the code was generated by AI coding agents, which may introduce unexpected bugs or security issues. I am not responsible for any problems arising from its use. Comments and feedback are welcome — feel free to open an issue.
Example Use Cases
- Cross-check research with a second model. Build a Claude Code skill that sends a key argument to GPT or Gemini via NaviGator for an independent sanity check.
- Generate images from a coding workflow. Ask Claude Code to create a diagram or figure using DALL-E through NaviGator, without leaving your terminal.
- Transcribe a lecture recording. Pass an audio file to NaviGator's Whisper endpoint and get a transcript back — all from within Claude Desktop.
- Compare model outputs side by side. Send the same prompt to multiple NaviGator models (GPT, Gemini, Llama) and diff the responses in one conversation.
- Embed text for semantic search. Generate embeddings for a batch of documents using NaviGator's embedding models, then use them downstream in your own pipeline.
What is UF NaviGator?
NaviGator is UF's self-service AI toolkit providing API access to GPT, Gemini, Claude, Llama, image generation, speech, and embedding models — all through your UF credentials. It is part of the broader UF AI initiative that includes NaviGator Chat, NaviGator Notebook, and more.
For a list of available models, see the NaviGator Models documentation.
Step-by-Step Setup Guide
Step 1: Install Node.js
You need Node.js 18 or later. Download from nodejs.org or use a package manager:
# Windows
winget install OpenJS.NodeJS.LTS
# macOS
brew install node
# Ubuntu/Debian
sudo apt install nodejs npm
Verify the installation:
node --version # should print v18.x or higher
npm --version # should print 9.x or higher
Step 2: Get a UF NaviGator API key
- Go to the NaviGator API key portal
- Log in with your GatorLink credentials
- Create a new API key and copy it (you won't be able to see it again)
If you need a custom budget or team access, submit a service request.
For a walkthrough, see the NaviGator Quickstart Guide.
Step 3: Install the MCP server
npm install -g uf-navigator-mcp
Or skip global install and use npx uf-navigator-mcp to run it on demand.
Step 4: Set your API key
Choose one of the following:
Option A — Environment variable (recommended):
# Linux / macOS — add to ~/.bashrc or ~/.zshrc
export UF_NAVIGATOR_API_KEY="your-key-here"
# Windows (PowerShell, persists for current user)
[Environment]::SetEnvironmentVariable("UF_NAVIGATOR_API_KEY", "your-key-here", "User")
Option B — Key file:
# Linux / macOS
mkdir -p ~/.config/uf-navigator-mcp
echo "your-key-here" > ~/.config/uf-navigator-mcp/key
chmod 600 ~/.config/uf-navigator-mcp/key
Option C — At runtime: Use the navigator_set_api_key tool after connecting (in-memory by default; pass persist: true to save to disk).
Step 5: Connect to your AI client
Claude Code (CLI)
claude mcp add uf-navigator -- npx uf-navigator-mcp
Or with an inline API key:
claude mcp add uf-navigator --env UF_NAVIGATOR_API_KEY=your-key-here -- npx uf-navigator-mcp
Claude Desktop
Add to your config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"uf-navigator": {
"command": "npx",
"args": ["uf-navigator-mcp"],
"env": {
"UF_NAVIGATOR_API_KEY": "your-key-here"
}
}
}
}
Restart Claude Desktop after saving.
Other MCP Clients
This server uses stdio transport. Point any MCP client at npx uf-navigator-mcp with UF_NAVIGATOR_API_KEY in the environment.
Step 6: Verify
Ask your AI assistant:
"Use the health_check tool to verify the UF NaviGator connection."
You should see a response confirming the API key is present, the base URL is reachable, and models are available.
Key file locations
| OS | Config directory |
| ------- | ----------------------------------------------------------------------------- |
| Linux | $XDG_CONFIG_HOME/uf-navigator-mcp/ (default: ~/.config/uf-navigator-mcp/) |
| macOS | ~/Library/Application Support/uf-navigator-mcp/ |
| Windows | %APPDATA%\uf-navigator-mcp\ |
Aliases
No aliases are created by default. Use navigator_set_alias to create your own:
"Create an alias
my-gptpointing togpt-4o"
Aliases are stored in your personal config directory (see Key file locations) as aliases.json. See aliases.example.json for a sample:
{
"latest_openai": "gpt-5.2",
"latest_google": "gemini-3.1-pro"
}
This is useful for keeping agent prompts stable — point aliases like latest_openai at whatever model is current, and update the alias when new models are released without changing your prompts.
Available Tools
Inference
| Tool | Description |
| -------------------------- | ---------------------------------------- |
| navigator_chat | Chat completions (streaming supported) |
| navigator_embeddings | Text embeddings |
| navigator_image_generate | Image generation (DALL-E compatible) |
| navigator_speech_to_text | Audio transcription (Whisper-compatible) |
| navigator_text_to_speech | Text-to-speech synthesis |
Model Management
| Tool | Description |
| ------------------------------- | ------------------------------------------ |
| navigator_list_models | List available models (cached, filterable) |
| navigator_refresh_models | Force live refresh of model list |
| navigator_get_model_specs | Fetch a model's spec card |
| navigator_refresh_model_index | Refresh specs for all cached models |
Aliases
| Tool | Description |
| ------------------------- | ------------------------- |
| navigator_get_aliases | View all alias mappings |
| navigator_set_alias | Create or update an alias |
| navigator_resolve_model | Resolve alias to model ID |
| navigator_delete_alias | Remove an alias |
Compliance, Cost & Health
| Tool | Description |
| ------------------------------------- | ------------------------------------------------------- |
| navigator_check_data_classification | Check model approval for a UF data classification level |
| dry_run_cost_estimate | Estimate token count and cost without calling the API |
| health_check | Verify API key, connectivity, and model endpoint |
| navigator_set_api_key | Update API key at runtime (in-memory by default) |
Environment Variables
| Variable | Required | Default | Description |
| ----------------------- | -------- | ------------------------------ | ---------------------- |
| UF_NAVIGATOR_API_KEY | Yes* | — | Your NaviGator API key |
| UF_NAVIGATOR_BASE_URL | No | https://api.ai.it.ufl.edu/v1 | API base URL |
Required unless using a key file or navigator_set_api_key.
Security
- API keys are never logged, emitted in tool output, or committed to the repo.
redactKey()scrubs the key from all error messages before logging.- All logs go to stderr only (stdout is reserved for MCP protocol).
- Key files are written with mode
0o600. On Windows, Node.js ignores POSIX mode bits — files inherit parent directory ACLs. - The
.envfile is gitignored.
Data Classification
UF NaviGator models are approved for specific data classification levels. Use navigator_check_data_classification to verify a model is approved for your data before sending it.
| Level | Sensitivity | Examples | | ---------------- | ----------- | ------------------------------------------ | | Public | Lowest | Published research, course catalogs | | Sensitive | Low | Internal emails, unpublished drafts | | Confidential | Medium | Student records (FERPA), HR data | | Restricted | High | Financial data, export-controlled research | | Regulated | Highest | HIPAA, PCI, classified information |
Development
git clone https://github.com/zoutianxin1/uf-navigator-mcp.git
cd uf-navigator-mcp
npm install
npm run build
npm test
| Command | Description |
| --------------- | ---------------------------------- |
| npm run dev | Run with tsx (no build step) |
| npm test | Unit tests (no network required) |
| npm run smoke | End-to-end test (requires API key) |
| npm run build | Compile TypeScript to dist/ |
UF NaviGator Resources
| Resource | URL | | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | NaviGator Toolkit overview | https://it.ufl.edu/ai/navigator-toolkit/ | | API key portal | https://api.ai.it.ufl.edu/ui | | Available models | https://docs.ai.it.ufl.edu/docs/navigator_models/ | | Quickstart guide | https://docs.ai.it.ufl.edu/docs/navigator_toolkit/getting_started/quickstart/ | | Full documentation | https://docs.ai.it.ufl.edu/ | | Text generation API | https://docs.ai.it.ufl.edu/docs/navigator_toolkit/capabilities/text_generation/ | | Image generation API | https://docs.ai.it.ufl.edu/docs/navigator_toolkit/capabilities/image_generation/ | | Function calling API | https://docs.ai.it.ufl.edu/docs/navigator_toolkit/capabilities/function_calling/ | | Changelog | https://docs.ai.it.ufl.edu/docs/changelog/ | | Service request (custom budgets) | https://ufl.teamdynamix.com/TDClient/33/IT-Portal/Requests/ServiceDet?ID=413 | | UF AI hub | https://it.ufl.edu/ai/ | | NaviGator Chat | https://it.ufl.edu/ai/navigator-chat/ | | NaviGator Notebook | https://it.ufl.edu/ai/navigator-notebook/ | | UF AI FAQ | https://ai.ufl.edu/teaching-with-ai/faqs/ | | AI governance & privacy | https://privacy.ufl.edu/laws-and-regulations/ai-governance/ | | UF Libraries AI guide | https://guides.uflib.ufl.edu/ai | | Model Context Protocol | https://modelcontextprotocol.io/ |
Troubleshooting
| Problem | Solution |
| ------------------------------- | ------------------------------------------------------------------------------------- |
| "API key not found" | Set UF_NAVIGATOR_API_KEY env var, create a key file, or use navigator_set_api_key |
| Tools don't appear in Claude | Restart Claude Desktop/Code after config changes |
| "Network error" on health check | Check that you can reach api.ai.it.ufl.edu (may require UF VPN) |
| Model not found | Run navigator_refresh_models to update the model cache |
| Stale specs | Run navigator_refresh_model_index or wait for the 24-hour TTL |