AI Ops Hub
AI Ops Hub gives AI assistants safe, sandboxed access to your local machine for managing documents, files, tasks, and web content.
Document & Knowledge Base (RAG)
Search your personal document corpus (
rag_search) — keyword (FTS5), vector (embeddings), or hybrid search with Reciprocal Rank FusionAdd documents to the corpus (
rag_add_document) — content is auto-chunked, FTS-indexed, and embedded for semantic search
File Management (Sandboxed)
Read files (
file_read) from a sandboxed notes directory, protected against path traversal attacksWrite files (
file_write) to the sandboxed notes directory, with extension allowlist enforcement
Web Access
Fetch web pages (
web_fetch) — retrieves clean, stripped text from allowlisted hosts only (deny-by-default)
Task Management
Create tasks (
task_create) with optional due dates and project labels, stored as human-editable markdownList tasks (
task_list) filtered by status (open/completed) and/or project name
Security Boundaries
File operations are sandboxed to a configured
NOTES_DIRWeb fetching is restricted to an explicit host allowlist
All inputs are validated and paths are protected against traversal attacks
Provides secure access to local files and documents with path validation and safety checks for reading notes and documentation
Integrates with SQLite database for RAG (Retrieval-Augmented Generation) search functionality over personal document corpus
Enables creation and management of tasks and notes through dedicated task management tools
Click 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., "@AI Ops Hubsearch my notes for recent deployment issues"
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.
AI Ops Hub
An MCP server that gives AI assistants safe, sandboxed hands on your machine — notes, tasks, web pages, and hybrid search (FTS5 + embeddings) over a personal document corpus. Built with TypeScript, SQLite, and a security-first design.
MCP (Model Context Protocol) is the open standard that lets AI clients like Claude Desktop call external tools. This server implements it twice from one codebase: over stdio for local clients and over HTTP for remote access.
What it looks like in practice
Once connected to Claude Desktop, conversations like this just work:
You: Find my notes about the Postgres migration and add a task to finish it by Friday.
Claude: →
rag_search("postgres migration")— 3 matching chunks from your corpus →task_create("Finish Postgres migration", due: "2026-07-31")"Found your migration notes — the remaining step was the index rebuild. Task created for Friday."
Every step happens inside the sandbox you configured: Claude can only touch the notes directory you allowed, only fetch from hosts you allowlisted, and only through the tools below.
Related MCP server: KnowledgeMCP
Tools
Tool | What it does |
| Search the corpus — |
| Add or update a document: auto-chunked, FTS-indexed, embedded when vector search is configured |
| Corpus statistics: documents, chunks, embeddings, backend availability |
| Notes access — sandboxed to |
| Fetch a page from allowlisted hosts only, stripped to clean text (cheerio) |
| Tasks stored as plain, human-editable markdown |
Hybrid search is the default when OPENAI_API_KEY is set: FTS5 and cosine-similarity results are merged with Reciprocal Rank Fusion — rank-based fusion that needs no score normalization between bm25 and cosine scales. If the vector backend fails mid-query, hybrid degrades gracefully to keyword results.
Security model
Local tool access for an LLM is a security problem before it is anything else. The interesting engineering here:
Path sandboxing that survives the classic bypasses. Every path resolves against
NOTES_DIR; absolute paths,../traversal, and the sibling-prefix bypass (notesvsnotes-evil— a bug most naivestartsWithchecks have) are rejected. Extension allowlist is enforced on both read and write.Web fetching is deny-by-default.
web_fetchrefuses any host not inWEB_ALLOWED_HOSTS. Subdomains of allowed hosts pass; lookalikes (example.com.evil.com) do not. HTTP(S) only.The protocol channel stays clean. All logging goes to stderr — on a stdio MCP server, stdout belongs to JSON-RPC and a single stray
console.logcorrupts the stream.Typed failure paths. The persistence layer returns neverthrow
Resulttypes instead of throwing; inputs are validated with zod.
All of this is pinned down by 45 unit tests targeting exactly these properties — traversal attempts, prefix bypasses, lookalike domains, protocol filtering, rank fusion, and registry dispatch — running in CI on Node 20 and 22.
Architecture
Both transports consume one ToolRegistry — a single source of truth for tool definitions and dispatch, so the stdio and HTTP surfaces can never drift apart.
flowchart LR
CD[Claude Desktop] -- "stdio (JSON-RPC)" --> REG[ToolRegistry<br/>definitions + dispatch]
RC[Remote client] -- "HTTP :3333" --> REG
REG --> FS["FileService<br/>sandboxed notes"]
REG --> WS["WebService<br/>allowlisted fetch"]
REG --> TS["TaskService<br/>markdown store"]
REG --> RAG["RAGService<br/>keyword | vector | hybrid"]
RAG -- "FTS5 (bm25)" --> POOL["ConnectionPool"]
RAG -- "embeddings + cosine" --> VEC["VectorRAGService"]
VEC --> POOL
RAG -- "RRF fusion" --> RAG
POOL --> DB[("SQLite<br/>docs + chunks<br/>chunks_fts + chunk_vecs")]src/
server.ts MCP entrypoint (SDK 1.x): wires services into the registry
tools/
registry.ts single source of truth: tool schemas + dispatch
transports/
http-transport.ts thin HTTP facade over the registry: /health, /tools, /call, /status
connectors/
file-service.ts sandboxed file access
web-service.ts allowlisted web fetching + HTML cleaning
task-service.ts markdown-backed task store
rag/
rag-service.ts search facade: keyword / vector / hybrid modes
fusion.ts Reciprocal Rank Fusion (pure, unit-tested)
sqlite-client.ts SQLite persistence: FTS5, chunking, migrations (neverthrow API)
vector-rag-service.ts vector search with OpenAI embeddings
embedding-service.ts embedding generation (text-embedding-3-small)
db/
connection-pool.ts SQLite connection poolingQuick start
git clone https://github.com/Galiusbro/ai-ops-hub.git && cd ai-ops-hub
npm install
cp .env.example .env # adjust paths and allowlist
npm run build
npm start # stdio only (for Claude Desktop)
npm run start:http # stdio + HTTP facade on :3333The HTTP facade is opt-in (--http flag or HTTP_ENABLED=1) so that MCP clients can spawn multiple server instances without port clashes.
Connect to Claude Desktop
{
"mcpServers": {
"ai-ops-hub": {
"command": "node",
"args": ["/absolute/path/to/dist/server.js"],
"env": {
"NOTES_DIR": "/path/to/your/notes",
"RAG_DB_PATH": "/path/to/your/rag.db"
}
}
}
}Or talk to it over HTTP
curl http://localhost:3333/health
curl http://localhost:3333/tools
curl -X POST http://localhost:3333/call \
-H "Content-Type: application/json" \
-d '{"name":"rag_search","arguments":{"query":"postgres migration"}}'Configuration
Variable | Default | Purpose |
|
| Directory the file tools are sandboxed to |
|
| Markdown file behind the task tools |
|
| SQLite database for the corpus |
|
| Comma-separated allowlist for |
|
| HTTP transport port |
| — | Enables vector + hybrid search (embeddings) |
Development
npm run dev # run from source (tsx)
npm test # vitest unit suite
npm run type-check # tsc --noEmit
npm run lintRoadmap
MCP server over stdio + HTTP
Sandboxed file / web / task tools
SQLite FTS5 corpus with trigger-synced index
Unit tests for the security-critical paths + CI
Shared tool registry between the two transports
Vector search wired in: hybrid mode with Reciprocal Rank Fusion
@modelcontextprotocol/sdk1.xStreamable HTTP transport from the SDK (replace the custom REST facade)
Audit logging
Local embedding backend as an alternative to OpenAI
Why this exists
I built this to understand MCP from the inside — the protocol, the transports, and what it actually takes to hand an LLM safe access to a real machine. It grew into a working local-first assistant backend: the FTS5 corpus, the sandboxing, and the test suite are the parts I'd reuse in production.
License
Available Tools
7 toolsfile_readC
Читать содержимое файла
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Путь к файлу |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action (read) but doesn't describe traits like whether it requires specific permissions, handles errors (e.g., missing files), returns content format (text/binary), or has rate limits. This is a significant gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Russian that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file reading tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., text content, error messages) or behavioral aspects like file size limits or encoding. Given the complexity and lack of structured data, more context is needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'path' parameter documented as 'Путь к файлу' (Path to the file). The description doesn't add any meaning beyond this, such as path format examples or constraints. Given the high schema coverage, the baseline score of 3 is appropriate, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Читать содержимое файла' (Read file contents) clearly states the verb (read) and resource (file contents), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'rag_search' or 'web_fetch' which might also involve reading operations, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'file_read' over 'rag_search' for document access or 'web_fetch' for external content, nor does it specify prerequisites like file existence or permissions. This leaves the agent with minimal usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_writeC
Записать содержимое в файл
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Путь к файлу | |
| content | Yes | Содержимое для записи |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('write content to a file') but does not disclose critical traits such as whether it overwrites existing files, requires specific permissions, handles errors, or has rate limits. This leaves significant gaps in understanding the tool's behavior for a mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence in Russian that directly states the tool's purpose without any unnecessary words. It is front-loaded and efficiently communicates the core function, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a file write operation (a mutation with potential side effects), no annotations, and no output schema, the description is incomplete. It lacks details on behavior, error handling, and return values, which are crucial for safe and effective use. The description does not compensate for these gaps, making it inadequate for the tool's context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with clear descriptions for 'path' and 'content' parameters in Russian. The description does not add any additional meaning beyond what the schema provides, such as format examples or constraints. Given the high schema coverage, the baseline score of 3 is appropriate, as the schema adequately documents the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Записать содержимое в файл' clearly states the action (write) and resource (file) in Russian, which translates to 'Write content to a file.' This is specific and unambiguous about the tool's function. However, it does not differentiate from sibling tools like 'file_read' or 'rag_add_document,' which might involve file operations, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios like overwriting existing files, creating new files, or when to choose 'file_write' over 'rag_add_document' for document storage. Without such context, users must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_add_documentC
Добавить документ в RAG корпус
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | URI документа | |
| content | Yes | Содержимое документа | |
| title | Yes | Заголовок документа |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action is to add a document, implying a write operation, but doesn't cover critical aspects like permissions needed, whether duplicates are allowed, error handling, or rate limits. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Russian that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a write operation with no annotations and no output schema, the description is incomplete. It lacks details on what happens after adding (e.g., success confirmation, error messages, or how the document integrates into the corpus), which is crucial for an agent to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, clearly documenting the three required parameters (uri, content, title). The description adds no additional meaning beyond this, such as explaining parameter relationships or constraints, so it meets the baseline for high schema coverage without compensating value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Добавить' - add) and resource ('документ в RAG корпус' - document to RAG corpus), making the purpose understandable. However, it doesn't distinguish this tool from potential sibling tools like 'rag_search' or 'file_write', which could also involve document operations, so it misses full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing a RAG corpus setup, or compare it to siblings like 'rag_search' for retrieval or 'file_write' for storage, leaving the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_searchC
Поиск по личному корпусу документов
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Поисковый запрос | |
| limit | No | Максимальное количество результатов |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'поиск' (search) which implies read-only behavior, but doesn't disclose any behavioral traits like whether it performs semantic/vector search, how results are ranked, if there are rate limits, authentication requirements, or what the return format looks like. The description adds minimal value beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient phrase in Russian that directly states the tool's function. It's appropriately sized and front-loaded with zero wasted words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a RAG search tool (which typically involves semantic retrieval and possibly generation), no annotations, no output schema, and sibling tools that might overlap (like web_fetch), the description is insufficient. It doesn't explain what 'личный корпус документов' (personal document corpus) entails, how documents are indexed, or what the search returns, leaving significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (query and limit) adequately. The description doesn't add any meaning beyond what the schema provides (e.g., it doesn't explain what type of queries work best, what the limit applies to, or format expectations). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Поиск по личному корпусу документов' (Search through personal document corpus) states the general purpose (searching documents) but is vague about the specific mechanism (RAG-based search). It distinguishes from obvious non-search siblings like file_write or task_create, but doesn't clearly differentiate from potential search alternatives like web_fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention when this tool is appropriate (e.g., for semantic search over personal documents) or when other tools might be better (e.g., file_read for direct file access, web_fetch for web content).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_createC
Создать новую задачу
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Заголовок задачи | |
| project | No | Проект | |
| due | No | Срок выполнения (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('create') but doesn't cover permissions needed, whether the task is saved permanently, error conditions, or response format. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., side effects, permissions), response format, and error handling, which are critical for an agent to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (title, project, due) with descriptions. The description adds no additional parameter semantics beyond what's in the schema, resulting in the baseline score for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Создать новую задачу' (Create a new task) clearly states the verb ('create') and resource ('task'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'task_list' beyond the basic action, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when not to use it, or how it relates to sibling tools like 'task_list' or 'file_write', leaving the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_listC
Список задач
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Фильтр по проекту | |
| status | No | Статус (open/completed) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers none. 'Список задач' doesn't indicate whether this is a read-only operation, if it requires authentication, what format the output takes, or any limitations (e.g., pagination, rate limits). For a tool with parameters and no annotations, this leaves the agent completely in the dark about behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is extremely concise (two words), this is under-specification rather than effective brevity. It fails to convey essential information that would help an agent use the tool correctly. Every sentence should earn its place, but here the minimal content doesn't provide value beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has parameters and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a list of task objects), how results are structured, or any prerequisites for use. With no annotations to fill gaps, this leaves significant uncertainty about the tool's operation and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter information beyond what's already in the schema, which has 100% coverage with clear descriptions for both parameters ('project' filter and 'status' with enum). Since the schema does the heavy lifting, the baseline score of 3 is appropriate—the description neither compensates for gaps nor adds meaningful context about parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Список задач' (List of tasks) is a tautology that essentially restates the tool name 'task_list' in Russian. It doesn't specify what action the tool performs (e.g., 'retrieve tasks' or 'filter tasks') or what resource it operates on. While it indicates this is about tasks, it doesn't distinguish this from sibling tools like 'task_create' beyond the obvious naming difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of when to use 'task_list' instead of other task-related tools like 'task_create', or how it relates to non-task siblings like 'file_read' or 'rag_search'. The user must infer usage from the name alone, which is insufficient for effective tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_fetchC
Получить содержимое веб-страницы
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL страницы |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'получить' (get) implies a read-only operation, it doesn't specify important behavioral traits like authentication requirements, rate limits, timeout handling, error conditions, or what happens with dynamic content (JavaScript, redirects). For a web fetching tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that directly states the tool's purpose without any unnecessary words. It's appropriately sized for a simple tool with one parameter and gets straight to the point with zero wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a web fetching tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what format the content is returned in (HTML, text, metadata), how errors are handled, whether it follows redirects, or any limitations (size, content types). Given the complexity of web fetching and the lack of structured documentation elsewhere, the description should provide more contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description doesn't add any parameter-specific information beyond what's already in the schema (which has 100% coverage). The schema fully documents the single 'url' parameter with its type and description. Since schema coverage is high, the baseline score of 3 is appropriate - the description doesn't compensate but doesn't need to given the comprehensive schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Получить содержимое веб-страницы' (Get web page content) clearly states the verb (get/retrieve) and resource (web page content), making the purpose immediately understandable. However, it doesn't differentiate from potential sibling tools like 'file_read' or 'rag_search' that might also retrieve content from different sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'file_read' (for local files) or 'rag_search' (for document search). There's no mention of prerequisites, limitations, or specific contexts where this tool is preferred over other content retrieval methods available in the sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
7 tool updates
- First observed
file_read - First observed
file_write - First observed
rag_add_document - First observed
rag_search - First observed
task_create - First observed
task_list - First observed
web_fetch
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose with no overlap: file operations, RAG operations, task management, and web fetching are all separate domains. The descriptions clearly differentiate them, making misselection unlikely.
Most tools follow a consistent verb_noun pattern (e.g., file_read, task_create, web_fetch), but 'rag_add_document' and 'rag_search' deviate slightly by using 'add' and 'search' as verbs instead of a uniform verb style. The naming is still readable and mostly predictable.
With 7 tools, this server is well-scoped for an AI Ops Hub, covering key areas like file handling, RAG, task management, and web operations. Each tool earns its place without feeling excessive or insufficient.
The tool surface covers core operations for file I/O, RAG, tasks, and web fetching, but there are minor gaps such as missing update/delete for tasks or document management in RAG. Agents can likely work around these with the provided tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The CustomGPT.ai MCP server is a fully managed, RAG-powered endpoint that connects large language models with private knowledge bases and external data sources. It provides tools for retrieval-augmented generation queries (send_message), data ingestion (upload_file), and source listing, enabling AI agents to query private documents like PDFs with high accuracy and real-time citations.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn advanced MCP server providing RAG-enabled memory through a knowledge graph with vector search capabilities, enabling intelligent information storage, semantic retrieval, and document processing.1347MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to perform semantic searches over local document collections using multi-context organization and automatic OCR. It supports various file formats including PDF, DOCX, and images, ensuring all data processing remains local and private.7MIT
- AlicenseAqualityDmaintenanceA comprehensive MCP server that enables AI models to perform local file operations, command execution, and task management across multiple platforms. It features advanced capabilities like row-level file editing, directory searching, and system monitoring with built-in security filters.1325Mulan Permissive Software , Version 2
- AlicenseNot gradedqualityAmaintenanceMCP server for local RAG over personal notes, PDFs, and documents, enabling plain-English querying and hybrid search with multi-hop context expansion.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/Galiusbro/ai-ops-hub'
If you have feedback or need assistance with the MCP directory API, please join our Discord server