XLMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HTTP_PORT | No | HTTP port for MCP server | 8765 |
| MCP_TRANSPORT | No | Transport mode for MCP server (stdio or http) | stdio |
| RAG_CACHE_DIR | No | Directory for RAG cache | ~/.aix/knowledge |
| RAG_CHUNK_SIZE | No | Chunk size for RAG indexing | 512 |
| RAG_AUTO_REFRESH | No | Enable automatic refresh of knowledge indexes | true |
| JUPYTER_API_TOKEN | Yes | API token for Jupyter authentication (required) | |
| RAG_CHUNK_OVERLAP | No | Chunk overlap for RAG indexing | 100 |
| JUPYTER_SERVER_URL | Yes | URL of the Jupyter server (required) | |
| JUPYTER_ALLOWED_DIRS | Yes | Comma-separated list of allowed directories (required) | |
| JUPYTER_NOTEBOOK_DIR | Yes | Base directory for notebooks (required) | |
| RAG_MAX_FILE_SIZE_MB | No | Maximum file size in MB for indexing | 10 |
| MCP_MAX_OUTPUT_TOKENS | No | Maximum output tokens for MCP responses | 25000 |
| RAG_AUTO_REFRESH_INTERVAL | No | Auto refresh interval in seconds | 300 |
| RAG_SKIP_NOTEBOOK_OUTPUTS | No | Skip notebook outputs during indexing | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| jupyter_list_notebooksA | List all Jupyter notebooks in a directory. |
| jupyter_find_notebookA | Find notebooks by filename. Useful when you know the notebook name but not the full path. |
| jupyter_get_notebook_infoA | Get information about a notebook including cell counts and kernel info. |
| jupyter_read_cellB | Read content of a specific cell in a notebook. |
| jupyter_read_all_cellsC | Read all cells from a notebook. |
| jupyter_append_cellB | Append a new cell to the end of a notebook. |
| jupyter_insert_cellB | Insert a new cell at a specific position in the notebook. |
| jupyter_update_cellC | Update content of an existing cell. |
| jupyter_delete_cellB | Delete a cell from the notebook. |
| jupyter_list_kernelsA | List all running Jupyter kernels. Returns: JSON with list of kernels (id, name, state, connections) |
| jupyter_start_kernelC | Start a new Jupyter kernel. |
| jupyter_stop_kernelB | Stop a running kernel. |
| jupyter_restart_kernelA | Restart a kernel (clears all state). |
| jupyter_interrupt_kernelB | Interrupt a running kernel (stop current execution). |
| jupyter_execute_codeB | Execute Python code in a running kernel. |
| jupyter_connect_notebookA | Connect to a notebook's kernel (create session if needed). This gets an existing kernel session for the notebook or creates a new one. Use the returned kernel_id for subsequent execute_code calls. |
| jupyter_execute_cellB | Execute a specific cell in a notebook. This will:
|
| knowledge_index_directoryA | Index or update knowledge directory for semantic search. Supports: .md (markdown), .py (Python), .ipynb (Jupyter notebooks) |
| knowledge_searchA | Search knowledge base with semantic similarity and filters. Searches across .md, .py, and .ipynb files. |
| knowledge_list_indexesA | List all indexed knowledge directories with statistics. Returns: JSON with list of indexes (directory, collection, file_count, last_updated) |
| knowledge_refresh_indexC | Manually force refresh of knowledge index. |
| knowledge_get_tagsA | Extract all unique tags from indexed documents with counts. |
| knowledge_get_metadata_fieldsC | List available metadata fields for filtering with examples. |
| knowledge_drop_indexB | Drop index and remove all cached data for a directory. |
| knowledge_list_knowledgesA | List all registered knowledge bases from ~/.aix/knowledges.yaml. Shows which knowledge bases are registered, whether they exist, and whether they have been indexed. Returns: JSON with knowledge bases information including paths, descriptions, tags, existence status, and index status |
| project_createA | Create a new project. Projects are stored in ~/.aix/projects/ and contain:
|
| project_listA | List all projects. Returns: JSON with list of all projects including name, status, type, tags, and timestamps |
| project_getB | Get detailed information about a project. |
| project_update_descriptionC | Update project description. |
| project_add_logA | Add a log entry to project. Log entries are automatically timestamped and appended to the project's log.md file. |
| project_read_logC | Read recent log entries from project. |
| project_set_contextA | Set or update project context. Context is machine-readable state stored in context.json. Only provided fields are updated. |
| project_get_contextC | Get project context. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 33 tools
Tools are clearly grouped by domain prefixes (jupyter_, knowledge_, project_), and within each group, operations are distinct and well-described. No overlapping purposes between tools.
All tool names follow a consistent snake_case pattern with domain prefix and verb_noun structure (e.g., jupyter_execute_cell, knowledge_index_directory, project_create). No mixing of conventions.
33 tools is slightly high but justified by covering three distinct domains. Each domain has a reasonable number of tools (16, 8, 8), and all seem necessary for their purpose.
The tool surface covers core operations for Jupyter notebooks, knowledge management, and project management. Minor overlap between jupyter_connect_notebook and jupyter_start_kernel, but overall no major gaps.