hermes-mcp
hermes-mcp
MCP サーバーは、Hermes(HashiCorp/IBM の文書管理システム)用です。AI アシスタント(Bob など)を Hermes インスタンスに接続し、チャットで直接文書を検索・閲覧・取得できるようにします。
前提条件
Related MCP server: Rememberizer MCP Server for Common Knowledge
インストール
git clone https://github.com/HarutuneDavisIBM/hermes-mcp.git
cd hermes-mcp
npm install
npm run buildコンパイルされたサーバーは build/index.js にあります。
認証
Hermes(SharePoint デプロイメント)は、AWSELBAuthSessionCookie-0 という名前の AWS Application Load Balancer セッション Cookie を介して認証します。この Cookie は、ブラウザーでログインすると自動的に設定されます。
セッション Cookie の取得方法
Hermes インスタンス(例:
https://hermes-sharepoint.hashicorp.services)を開いてログインしますDevTools を開きます(Mac では
Cmd+Option+I、Windows ではF12)ネットワーク タブに移動し、任意の
/api/v2/リクエストをクリックしますリクエストヘッダー で
cookieフィールドを見つけますAWSELBAuthSessionCookie-0=...の値をコピーします(その Cookie だけを、名前も含めて)
注: このセッション Cookie は定期的に失効します(通常は数時間後)。上記の手順を繰り返して更新する必要があります。
設定
サーバーを MCP クライアントの設定ファイルに追加します。Bob の場合、これは ~/.bob/settings/mcp.json です:
{
"mcpServers": {
"hermes": {
"command": "node",
"args": ["/absolute/path/to/hermes-mcp/build/index.js"],
"env": {
"HERMES_BASE_URL": "https://your-hermes-instance.example.com",
"HERMES_COOKIE": "AWSELBAuthSessionCookie-0=<your-session-cookie-value>"
}
}
}
}以下の値を置き換えます:
/absolute/path/to/hermes-mcpを、このリポジトリをクローンした実際のパスに置き換えますhttps://your-hermes-instance.example.comを、お使いの Hermes URL に置き換えます<your-session-cookie-value>を、DevTools から取得した Cookie 値に置き換えます
接続の確認
設定を保存したら、AI アシスタントに hermes_me を実行するよう依頼します。成功した応答は次のようになります:
{
"id": "...",
"email": "you@example.com",
"name": "Your Name"
}認証エラーが発生した場合、セッション Cookie が失効している可能性があります。上記の手順 を繰り返して新しいものを取得してください。
利用可能なツール
ツール | 説明 |
| 公開されたすべての文書に対する全文検索。オプションの |
|
|
| 下書き文書を一覧表示します。オプションで所有者のメールアドレスでフィルタリングできます。 |
| インスタンスで設定されているすべての文書タイプ(RFC、PRD、FRD、ADR など)を、そのスキーマとカスタムフィールドとともに一覧表示します。 |
| インスタンスで設定されているすべてのプロダクトとエリアを一覧表示します。 |
| 関連する文書をグループ化するプロジェクトを一覧表示します。 |
| 現在認証されているユーザーのプロファイルを取得します。セッション Cookie が機能していることを確認するために使用します。 |
プロンプトの例
接続後、AI アシスタントに以下のようなことを依頼できます:
"Vault 認証に関する RFC を Hermes で検索"
"HCP プラットフォームに関連するすべての PRD を検索"
"文書 HVS-022 を検索してその完全なメタデータを取得"
"自分が所有するすべての下書き文書を一覧表示"
"Hermes にはどのプロダクトがありますか?"
"Terraform に関連するプロジェクトを表示"
環境変数
変数 | 必須 | 説明 |
| 任意 | お使いの Hermes インスタンスのベース URL。デフォルトは |
| 必須* | 名前を含む完全な Cookie 文字列。例: |
| 必須* |
|
* HERMES_COOKIE または HERMES_TOKEN の少なくとも 1 つが必要です。
開発
# Install dependencies
npm install
# Build (compiles TypeScript → build/index.js)
npm run build
# Rebuild after making changes to src/index.ts
npm run buildソースは単一のファイル(src/index.ts)です。
セッション Cookie の更新
セッション Cookie は失効します。ツールが認証エラーを返し始めたら、新しい Cookie を取得してください:
ブラウザーで Hermes インスタンスにログインします
DevTools → ネットワーク → 任意の
/api/v2/リクエスト → リクエストヘッダー →cookieを開きますAWSELBAuthSessionCookie-0=...の値をコピーしますmcp.jsonのHERMES_COOKIEを更新します
MCP クライアントは次のリクエストで新しい値を取得します(ほとんどのクライアントでは再起動は不要です)。
コントリビューション
プルリクエストは歓迎します。大きな変更については、先に issue を開いてください。
ライセンス
MIT
Available Tools
12 toolshermes_approve_documentA
Approve a document in Hermes as the currently authenticated user. The document must be in 'In-Review' or 'Approved' status. The current user must be listed as an approver on the document. Use hermes_get_document to check the current status and approver list before calling this.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | SharePoint objectID of the document to approve (from hermes_search or hermes_get_document) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It discloses important preconditions (status requirements, approver requirement) and the authenticated-user context. However, it does not state the outcome of approval (e.g., status changes to 'Approved') or any reversibility or response behavior, leaving some behavioral ambiguity.
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 three sentences with no fluff. The core action is front-loaded, followed by conditions and a helpful pre-call instruction. Every sentence earns its place.
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 single-parameter mutation tool with no output schema, the description covers the essential invocation context: the action, valid input source, preconditions, and a verification step. It does not explain the response or post-approval state, but the provided guidance is sufficient for an agent to call it correctly.
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 coverage is 100% and the parameter description already explains document_id as the SharePoint objectID and where to obtain it. The tool description adds no additional parameter meaning, so the baseline score of 3 applies.
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 opens with a specific verb and resource: 'Approve a document in Hermes as the currently authenticated user.' It clearly distinguishes this tool from siblings like hermes_update_document or hermes_request_review by stating the approval action and the required document status and approver role.
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 gives strong context on when to call the tool: the document must be 'In-Review' or 'Approved' and the user must be an approver. It also instructs to use hermes_get_document to check status and approver list first. It does not explicitly name alternatives or when not to use the tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_create_draftA
Create a new document draft in Hermes. Returns the new document's ID which can be used with other tools. The draft will have WIP (work-in-progress) status until published via hermes_request_review.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Document title (required) | |
| product | No | Product or area name. Use hermes_list_products for valid values. | |
| summary | No | Short summary or abstract of the document | |
| doc_type | Yes | Document type abbreviation, e.g. 'RFC', 'PRD', 'FRD', 'ADR', 'Memo', 'PRFAQ'. Use hermes_list_document_types to see all available types. | |
| contributors | No | List of contributor email addresses | |
| product_abbreviation | No | Short product abbreviation used as the doc number prefix, e.g. 'HVS', 'TF'. Falls back to 'TODO' if omitted. |
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. It discloses the creation side effect, the WIP status, the returned ID, and the publishing path. This is strong behavioral context for a create operation, though it doesn't cover permissions or failure 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 two concise sentences with no filler. The most important facts—what it creates, what it returns, and the WIP/publish status—are front-loaded and clearly stated.
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 simple create tool with no output schema, the description fully covers the purpose, return value, and lifecycle status. An agent can invoke it correctly and understand what to do next with the returned ID.
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 each parameter is already documented. The description adds no parameter-specific meaning beyond the schema, which is acceptable given the 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 clearly states the action ('Create a new document draft'), the target resource (Hermes), and distinguishes its output (new document ID) and lifecycle state (WIP until published). It is easy to tell apart from sibling update/review tools.
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 gives clear lifecycle context: the draft is WIP and published later via hermes_request_review. This implies when to use the tool, though it does not explicitly mention alternatives like hermes_update_draft for editing or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_get_documentA
Get full metadata for a specific Hermes document by its SharePoint objectID. Returns title, status, approvers, summary, custom fields, and links. IMPORTANT: The document_id must be the 'objectID' field from hermes_search results (a SharePoint GUID like '01XOO7K4...'), NOT the human-readable docNumber like 'RFC-123' or 'HVS-022' — those will return a 404. Always call hermes_search first to obtain the objectID, then pass it here.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | The SharePoint objectID of the document — a GUID string like '01XOO7K4NVWSKOYH3XMVB3TF54U4DNOEC5'. Found in the 'objectID' field of hermes_search results. Do NOT use docNumber (e.g. 'RFC-123'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden. It discloses the input format requirement, the 404 error behavior for wrong IDs, and the output contents, which is strong for a simple read 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?
Every sentence earns its place: purpose, returned fields, critical input warning, and the prerequisite workflow. The most important information is front-loaded, and the description stays focused despite the warning complexity.
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 single-parameter read tool with no output schema and no annotations, this description is complete. It tells the agent what to pass, how to obtain it, what will be returned, and what happens if the wrong value is supplied.
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 schema already covers the parameter at 100%, so the baseline is 3. The description adds value by emphasizing the objectID versus docNumber distinction and the required upstream call to hermes_search, going beyond the schema.
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?
States the specific verb 'Get' and resource 'full metadata for a specific Hermes document by its SharePoint objectID,' and enumerates the returned fields. This clearly differentiates it from search and create/update siblings.
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?
Explicitly instructs to call hermes_search first to obtain the objectID, warns against using the human-readable docNumber, and states the 404 failure mode. This provides concrete when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_list_document_typesA
List all available document types configured in this Hermes instance (e.g. RFC, PRD, FRD) with their descriptions and custom fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It accurately communicates a read-only listing operation and the content of the response, but it does not mention permissions, pagination, or output format. For a simple 0-parameter metadata list, this is adequate but not rich.
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 one sentence with no wasted words, front-loads the primary action, and gives just enough detail to clarify purpose and return contents. It is concise without being under-specified.
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 parameterless metadata-listing tool with no output schema, the description fully covers what the tool does and what it returns. It includes examples and names the fields included in the response, so an agent has enough context to call it correctly.
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 tool has no parameters and the input schema is complete and empty, so there is nothing for the description to add about parameter semantics. The baseline for a zero-parameter tool is 4, and the description does not need to compensate for any gaps.
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 (list), the resource (document types), and the scope (all in this Hermes instance). It also includes concrete examples and the data returned (descriptions and custom fields), making it easily distinguishable from sibling list tools.
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 implies this should be used when an agent needs to enumerate available document types, but it provides no explicit when-to-use/when-not-to-use guidance or comparison with alternatives. Its intended context is reasonably clear from the resource name, but the guidance is not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_list_draftsA
List draft documents in Hermes. Returns documents that are in WIP (work-in-progress) status. Optionally filter by owner email address.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Filter drafts by owner email address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It explicitly states that only WIP-status documents are returned and that owner filtering is optional, which makes the tool's behavior predictable. The read-only nature is reasonably implied by 'List' and 'Returns', and no destructive side effects are suggested.
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 two focused sentences with no filler. The core action and status are front-loaded, and the optional filter is stated clearly at the end.
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 simple list tool with one optional parameter and no nested objects or output schema, the description provides enough context to invoke it correctly: it names the resource, the status filter, and the optional owner filter. It does not mention pagination or ordering, but those are minor gaps for this low-complexity tool.
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%, and the schema already documents the owner parameter as 'Filter drafts by owner email address'. The description repeats this in prose ('Optionally filter by owner email address') but adds no new semantic detail beyond what the schema provides.
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 uses a specific verb ('List') and resource ('draft documents in Hermes'), and further clarifies that drafts are WIP-status documents. This clearly distinguishes the tool from siblings like hermes_list_products and hermes_list_projects and from hermes_get_document.
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 clearly indicates when to use the tool: when listing draft/WIP documents, with an optional owner filter. It does not explicitly mention alternatives or exclusions, such as using hermes_search for broader queries, but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_list_productsA
List all products/areas configured in this Hermes instance. Useful for knowing valid product filter values when searching.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly states the operation is a list (read-only) and defines the scope as all configured products/areas in the Hermes instance. It does not describe the exact return format or pagination, but for a zero-parameter listing tool this is largely sufficient.
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 two short sentences with no filler. The main action and resource are front-loaded in the first sentence, and the second sentence adds practical usage guidance. Every word earns its place.
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?
This is a very simple tool with no parameters and no output schema. The description fully covers what the tool returns and why an agent would call it, making it complete for the tool's complexity level.
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 schema has zero parameters and 100% coverage, so there is no parameter documentation burden. The description reinforces that no filters are needed and implies the return values are valid product filter values, which is useful context beyond the empty schema.
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 uses a specific verb ('List') and resource ('all products/areas configured in this Hermes instance'), making the tool's function immediately clear. It also distinguishes itself from sibling tools like hermes_list_projects and hermes_list_document_types by naming a distinct resource type.
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 explicitly notes the tool is useful for knowing valid product filter values when searching, which gives the agent a concrete use case. It does not explicitly mention when not to use it or name alternative tools, but the use case is clear enough for such a simple list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_list_projectsA
List projects in Hermes. Projects group related documents together.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based, default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly indicates a read-only listing operation and the grouping purpose, but it does not describe pagination behavior, ordering, or response format. The page parameter in the schema partially compensates for the pagination gap.
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 consists of two short sentences with no filler. The core action and resource are front-loaded, and the second sentence adds relevant domain context without unnecessary verbosity.
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's very low complexity—one optional pagination parameter and no required inputs—the description plus schema is sufficient for basic invocation. It could mention return shape or when to choose this over sibling list tools, but these omissions are minor for this use case.
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 only parameter, page, is already fully described in the input schema with type, default, minimum, and a description. The tool description adds no additional parameter semantics, and the schema coverage is 100%, so the baseline 3 applies.
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 ('List') and the specific resource ('projects'), and adds useful domain context ('in Hermes') plus the meaning of projects ('group related documents together'). This distinguishes it from sibling tools like hermes_list_products and hermes_list_drafts.
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 statement 'Projects group related documents together' implicitly suggests this tool is useful when needing to enumerate project groupings, but it does not explicitly state when to prefer this over alternatives such as hermes_list_products or hermes_search. Usage context is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_meA
Get the currently authenticated user's profile in Hermes. Useful to confirm the session cookie is working.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavior disclosure. It communicates that this is a read-only operation ('Get') and that authentication via session cookie is involved. However, it does not mention response format, potential errors, or any side effects, though those are less critical for a zero-parameter profile lookup.
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 two short sentences with no filler. The core purpose is front-loaded, and the secondary usage hint adds value without redundancy.
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 zero-parameter read-only profile endpoint with a simple purpose and no output schema, the description is sufficiently complete. An agent can determine what this tool does and when to call it without additional 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 tool has zero parameters, so there is no parameter meaning to add beyond the schema. The baseline of 4 applies because the absence of parameters makes parameter documentation unnecessary.
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 uses a specific verb and resource: 'Get the currently authenticated user's profile in Hermes.' This clearly distinguishes it from the sibling tools, which all operate on products, projects, drafts, or documents.
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 explicitly states a concrete use case: 'Useful to confirm the session cookie is working.' It does not name alternative tools or when not to use it, but no sibling tool appears to be a direct alternative for retrieving the current user's profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_request_reviewA
Publish a draft document and request review from approvers. This moves the document from WIP status to 'In-Review' and notifies the assigned approvers. The draft must already have approvers set (use hermes_update_draft to add them first). The document_id must be the SharePoint objectID of a draft.
| Name | Required | Description | Default |
|---|---|---|---|
| document_id | Yes | SharePoint objectID of the draft to publish for review (from hermes_list_drafts or hermes_create_draft) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses key effects: the document moves from WIP to In-Review and notifies assigned approvers. It does not address permissions, reversibility, failure modes, or output behavior, so it is informative but not fully transparent.
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?
Three concise sentences with the primary action and state change first, followed by prerequisite and ID requirement. No fluff or repetition; every sentence carries useful information.
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 single-parameter tool with no annotations and no output schema, the description adequately covers the action, side effects, prerequisite, and parameter semantics. Minor gaps around error handling and permissions exist, but the tool is simple enough that this feels sufficient.
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% and already explains document_id as the SharePoint objectID of the draft. The description reinforces this by specifying it must be a draft and can come from list/create operations, but it doesn't add substantial new meaning beyond the schema.
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 states a specific verb (Publish/request review), the resource (draft document), and the exact state transition (WIP to 'In-Review'). It clearly differentiates from nearby siblings like hermes_update_draft, hermes_approve_document, and hermes_get_document by focusing on the publication-for-review action.
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?
Provides a clear prerequisite: approvers must already be set, and explicitly directs users to hermes_update_draft to add them. It also scopes the document_id to a SharePoint objectID of a draft. It lacks an explicit when-not-to-use or exclusion list, but the usage context is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_searchA
Search documents in Hermes using full-text search. Returns matching published documents with titles, owners, product areas, and document types. Each result contains an 'objectID' field (a SharePoint GUID like '01XOO7K4...') — pass that value to hermes_get_document to fetch full metadata. Do NOT pass the human-readable 'docNumber' (e.g. 'RFC-123') to hermes_get_document; it will return 404.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (0-based, default 0) | |
| query | Yes | Search query text | |
| product | No | Filter by product name | |
| doc_type | No | Filter by document type, e.g. 'RFC', 'PRD', 'FRD' | |
| hits_per_page | No | Number of results per page (default 10, max 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses the search scope (published documents only), the result shape (titles, owners, product areas, document types), and a critical failure mode — passing docNumber to hermes_get_document returns 404. Pagination behavior and empty-result semantics are left to the schema and inference, which keeps this from a 5.
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?
Three sentences with zero filler: purpose first, then the result contract, then a caution about the docNumber pitfall. Every sentence carries operational value, and the critical integration warning is placed last without burying the purpose.
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?
With no output schema or annotations, the description compensates by specifying the result fields the agent can expect and the exact follow-up contract with hermes_get_document. The notable omission is explicit treatment of pagination and empty-result behavior, which the schema only partially covers via the page and hits_per_page parameters.
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% with all five parameters documented, so the baseline is 3. The description adds no parameter-specific semantics beyond the schema (e.g., query operators, case sensitivity, or how product/doc_type filters combine), so it neither improves nor degrades the baseline.
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?
States a specific verb and resource ('Search documents in Hermes using full-text search') and immediately scopes behavior to 'matching published documents,' which distinguishes it from sibling draft/list tools. It also names its follow-up sibling, hermes_get_document, making the tool's role in the workflow unambiguous.
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?
Provides explicit workflow routing: results contain an objectID that must be passed to hermes_get_document, and warns against passing docNumber. However, it does not contrast itself with list-based siblings (e.g., hermes_list_drafts) or state when browsing is preferable to searching, so the when-to-use guidance is partial but clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_update_documentA
Update a published document's metadata in Hermes. Supports changing status (In-Review, Approved, Obsolete), title, summary, owners, contributors, approvers, approver groups, and custom fields. For drafts (WIP), use hermes_update_draft instead. Valid statuses: 'In-Review', 'Approved', 'Obsolete'.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New document title | |
| owners | No | Updated list of owner email addresses (replaces existing) | |
| status | No | New document status. 'In-Review' — document is under active review by approvers. 'Approved' — document has been approved. 'Obsolete' — document is no longer current. | |
| summary | No | New summary or abstract | |
| approvers | No | Updated list of approver email addresses (replaces existing) | |
| document_id | Yes | SharePoint objectID of the published document to update (from hermes_search or hermes_get_document) | |
| contributors | No | Updated list of contributor email addresses (replaces existing) | |
| custom_fields | No | Custom fields specific to the document type. IMPORTANT: 'name' must be the camelCase key (e.g. 'currentVersion'), 'type' must be uppercase (e.g. 'STRING', 'PEOPLE'), and 'display_name' must match the displayName from the API exactly. Call hermes_get_document on an existing doc or hermes_list_document_types to discover valid keys and types. | |
| approver_groups | No | Updated list of approver group names (replaces existing) |
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 communicates that this is a mutation, limits the operation to published documents, and enumerates supported fields and valid statuses, but it does not describe side effects, permission requirements, list-replacement semantics, or return behavior. The schema covers some parameter-level replacement behavior, but the tool description itself remains shallow on consequences.
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 short and front-loaded with the primary action and scope. The final sentence repeating the valid statuses is slightly redundant with the parenthetical list earlier, which keeps it from a perfect conciseness score, but overall it is efficient and easy to scan.
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 tool with nine parameters and full schema coverage, the description provides sufficient scoping: it names the resource, lists mutable fields, gives valid statuses, and routes draft usage away. It falls slightly short of fully complete because there is no output schema and the description does not state what the update returns or disclose any side effects beyond the update itself.
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 input schema already documents all nine parameters in detail, including the custom_fields name/type/display_name constraints. The tool description only repeats field names and valid statuses, adding no new parameter-level meaning beyond the schema.
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 opens with a specific verb and resource: 'Update a published document's metadata in Hermes.' It lists exactly which metadata fields are supported and explicitly distinguishes this tool from hermes_update_draft, so an agent can identify what it does without relying on the name alone.
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?
It explicitly states the intended scope ('published document') and gives a direct when-not-to-use instruction: 'For drafts (WIP), use hermes_update_draft instead.' This provides clear routing to the main sibling alternative while other siblings are distinguishable by name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hermes_update_draftA
Update a document draft in Hermes (WIP status only). Supports updating title, summary, product, contributors, approvers, approver groups, and custom fields. All fields are optional — only provided fields are changed. The document_id must be the SharePoint objectID from hermes_list_drafts or hermes_create_draft.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title for the document | |
| owners | No | Updated list of owner email addresses (replaces existing) | |
| product | No | New product or area name | |
| summary | No | New summary or abstract | |
| approvers | No | Updated list of approver email addresses (replaces existing) | |
| document_id | Yes | SharePoint objectID of the draft to update (from hermes_list_drafts or hermes_create_draft) | |
| contributors | No | Updated list of contributor email addresses (replaces existing) | |
| custom_fields | No | Custom fields specific to the document type. IMPORTANT: 'name' must be the camelCase key (e.g. 'currentVersion'), 'type' must be uppercase (e.g. 'STRING', 'PEOPLE'), and 'display_name' must match the displayName from the API exactly. Call hermes_get_document on an existing doc or hermes_list_document_types to discover valid keys and types. | |
| approver_groups | No | Updated list of approver group names (replaces existing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does explain partial-update semantics ('only provided fields are changed') and the WIP-only restriction, which is valuable. However, it does not mention what the operation returns, whether there are permission requirements, or how errors are surfaced, leaving meaningful 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 three sentences with no filler: purpose/WIP restriction, partial-update semantics, and the source of document_id. The information is front-loaded and every sentence contributes to correct invocation.
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?
The combination of description and a fully covered schema gives an agent the necessary info to call the tool correctly: WIP-only eligibility, patch semantics, required document_id, and detailed custom field rules. Missing behavioral details like response shape or non-WIP failure behavior are notable but not blockers given the rich schema.
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 input schema already documents every parameter, including the detailed custom_fields object. The description adds the useful patch behavior ('only provided fields are changed') but mostly lists fields that the schema already names, so it does not substantially extend the schema's semantic 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 states a specific verb ('Update') and resource ('a document draft in Hermes') and adds the critical WIP-status constraint, which distinguishes this tool from the sibling hermes_update_document. It also enumerates the updateable fields, making the tool's scope immediately clear.
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 clearly scopes usage to WIP drafts and explains that all fields are optional with only provided fields changed, plus the required document_id provenance. However, it does not explicitly name an alternative tool for non-WIP documents, so the when-not-to-use guidance is mostly implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource or lifecycle action: products, projects, drafts, published documents, review/approval, search, and metadata lookups. The only potentially overlapping pair (update_draft vs update_document) is clearly separated by WIP status vs published status.
Tool names follow a consistent hermes_verb_noun pattern (list_*, create_*, update_*, get_*, approve_*, request_*), with a minor deviation in hermes_me which lacks an explicit verb. Overall the naming convention is predictable and readable.
Twelve tools is well within the typical well-scoped range and each tool supports a distinct part of the document management workflow. No redundant or filler tools are present.
The core document lifecycle is covered: create draft, update draft, request review, approve, update published metadata/status, search, and retrieve. Minor gaps exist around rejection/request-changes and explicit deletion, but these are workable given the documented status transitions.
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
Ingest, manage, and retrieve documents for RAG-powered AI applications
Versioned documentation registry and semantic search for AI tools and coding assistants.
Search your knowledge bases from any AI assistant using hybrid RAG.
Search, read, and automate TextMine documents, records, workflows, integrations, and agent tasks.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to enhance their responses with relevant documentation through a semantic vector search, offering tools for managing and processing documentation efficiently.2263MIT
- AlicenseNot gradedqualityDmaintenanceEnables accessing and managing personal/team internal knowledge repository with tools for semantic search, smart search, document listing, and saving information for future recall.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to fetch, index, and perform semantic RAG-based searches on API documentation from various sources. It provides tools for hybrid search and collection management, allowing users to access up-to-date documentation from projects like Gemini and FastMCP.
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to intelligently search and reference documentation using hybrid semantic + keyword search via MCP protocol.
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/HarutuneDavisIBM/hermes-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server