SciComp Docs Agent
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SciComp Docs Agentfind instructions for submitting GPU jobs on Triton"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SciComp Docs Agent
Search and Q&A over Aalto scicomp-docs (Triton HPC and related guides).
Two ways to use this project:
Use case | What you get | Needs LLM API key? |
Browser chat UI with tool-calling loop | Yes (Aalto gateway + VPN) | |
Doc search tools for your own agent (Cursor, Claude, custom code) | No |
Both paths share the same Python tools in app/doc_tools.py.
Prerequisites
Python 3.12+ or Docker
Docs snapshot in
docs-source/(git submodule — required for both paths)ripgrep optional for local dev (
brew install ripgrep); included in the Docker imageLLM API key only for the web chat UI
Related MCP server: mcp-agno
Clone
git clone --recurse-submodules https://github.com/AaltoSciComp/scicomp-docs-assistant.git
cd scicomp-docs-assistantIf you already cloned without submodules:
git submodule update --init --recursiveAfter a healthy clone, /api/health should report docs_present: true and index_pages in the hundreds (typically 300+). If index_pages is 0, the docs submodule is missing — see Troubleshooting.
Quick start: Web chat UI (recommended)
Browser-based agent that calls the same tools and cites https://scicomp.aalto.fi/.
Requires: Aalto VPN + API key from llm-gateway.k8s.aalto.fi.
Docker (recommended)
cp .env.example .env
# Edit .env and set LLM_API_KEY=your-key-here
docker compose up --buildOpen http://localhost:8081 (host port 8081; container listens on 8080).
Local Python
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # set LLM_API_KEY
uvicorn app.main:app --reload --port 8080Open http://localhost:8080.
Using another LLM provider
The gateway client is OpenAI-compatible. Set in .env:
LLM_API_KEY=your-provider-key
LLM_BASE_URL=https://your-provider.example.com/v1
LLM_MODEL=your-model-idThe web UI and MCP can run together on the same server — MCP does not use the LLM.
Quick start: MCP only
Expose doc search to any MCP client. No LLM key, no VPN.
HTTP (Docker, recommended)
cp .env.mcp.example .env # optional; compose works without .env for MCP-only
docker compose up --buildMCP endpoint: http://localhost:8081/mcp/ (trailing slash required)
Verify:
curl -s http://localhost:8081/api/health | python3 -m json.tool
# expect: "docs_present": true, "index_pages": 300+ (approx), "llm_configured": falseOption B — HTTP (local Python)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --port 8080MCP endpoint: http://localhost:8080/mcp/
Option C — stdio (local MCP clients)
From the repo root, with dependencies installed:
source .venv/bin/activate # after pip install -r requirements.txt
python -m app.mcp_stdioCursor / VS Code client config (use your venv Python path):
{
"mcpServers": {
"scicomp-docs": {
"command": "/path/to/scicomp-docs-assistant/.venv/bin/python",
"args": ["-m", "app.mcp_stdio"],
"cwd": "/path/to/scicomp-docs-assistant",
"env": {
"DOCS_ROOT": "/path/to/scicomp-docs-assistant/docs-source",
"SKILLS_DIR": "/path/to/scicomp-docs-assistant/skills"
}
}
}
}MCP tools
Tool | Description |
| Rank pages by title, headings, and path |
| Table of contents with line numbers |
| Ripgrep over |
| Browse the docs folder tree |
| Read a file with optional line range |
Prompt scicomp-docs-search — recommended search workflow (same as the web agent skill).
Resource scicomp-docs://skill/search — raw skill markdown.
Connect from any MCP client (HTTP)
{
"mcpServers": {
"scicomp-docs": {
"url": "http://localhost:8081/mcp/"
}
}
}Clients that only support stdio (e.g. Claude Desktop) can proxy via mcp-remote:
{
"mcpServers": {
"scicomp-docs": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:8081/mcp/"]
}
}
}Connect from Python
Install the MCP client SDK on the machine running your script (pip install "mcp>=1.19,<2"):
import asyncio
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
async with streamablehttp_client("http://localhost:8081/mcp/") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("find_pages", {"query": "GPU sbatch"})
print(result.content[0].text)
asyncio.run(main())Security:
/mcp/has no authentication. Bind to localhost or put a reverse proxy in front if exposing beyond your machine.
How it works (web agent)
You ask a question in the browser UI.
The LLM receives a search skill (
skills/scicomp-docs-search.md).The model calls tools:
find_pages→get_doc_outline/search_docs→read_doc.It answers with citations as published URLs on https://scicomp.aalto.fi/.
Updating the documentation snapshot
git submodule update --remote docs-source
docker compose up --build # rebuild image so docs-source is refreshedConfiguration
Variable | Default | Description |
| (empty) | Required for web chat only |
|
| OpenAI-compatible base URL |
|
| Model id |
|
| Sampling temperature |
|
| Max completion tokens |
|
| Max tool-calling rounds per chat turn |
|
| Path to scicomp-docs tree |
|
| Published site for citations |
|
| Agent skill markdown files |
|
| Bind address (local uvicorn) |
|
| Listen port (local uvicorn) |
Env templates:
.env.example— full template (web agent + MCP).env.mcp.example— minimal MCP-only (LLM_API_KEYempty)
Troubleshooting
Symptom | Likely cause | Fix |
| Submodule not initialized |
|
MCP client can't connect | Wrong port or missing trailing slash | Docker: |
MCP works but tools return nothing | Empty | Same as above; check health endpoint |
Chat returns 503 “LLM_API_KEY is not configured” | Key not set | Add |
Chat errors / timeouts from LLM | VPN off or wrong gateway | Connect to Aalto VPN; verify key at llm-gateway.k8s.aalto.fi |
| Old Compose version | Upgrade Docker Desktop, or |
Slow local search | ripgrep not installed |
|
stdio MCP: “docs not found” warning | Wrong | Run from repo root; set |
Docker build: can't pull | Docker Hub unreachable or rate-limited | Use a mirror, e.g. |
Health check:
curl -s http://localhost:8081/api/health | python3 -m json.toolHealthy MCP + docs: docs_present: true, index_pages > 0. Web chat additionally needs llm_configured: true.
Project layout
app/
main.py # FastAPI + SSE chat + MCP mount
mcp_server.py # MCP tools, prompt, resource
mcp_stdio.py # stdio entry point (`python -m app.mcp_stdio`)
agent.py # Tool-calling loop
doc_tools.py # search / list / read (shared by agent + MCP)
doc_index.py # Page/heading index for find_pages
config.py # Settings from .env
llm_client.py # Gateway HTTP client
static/ # Chat UI
skills/
scicomp-docs-search.md
docs-source/ # scicomp-docs git submoduleLicense
Documentation content belongs to AaltoSciComp/scicomp-docs. This agent wrapper is provided as-is for local use.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AaltoSciComp/scicomp-docs-assistant'
If you have feedback or need assistance with the MCP directory API, please join our Discord server