Skip to main content
Glama

elog-mcp

OpenAPI/MCP 서버로, LLM 에이전트에게 ELOG 전자 로그북에 대한 읽기 전용 HTTP 접근을 제공합니다. 참조 배포: T2K/ND280 elog https://elog.nd280.org/elog/; 표준 elogd 인스턴스와 함께 동작합니다.

  • 전체 텍스트(정규식), 속성, 날짜 범위로 항목 검색

  • 항목 전체 읽기(속성 + 본문 + 첨부 파일)

  • 첨부 파일 다운로드, 로그북 검색

엄격히 읽기 전용: HTTP GET 요청만 발행합니다. TLS 검증은 기본적으로 켜져 있습니다. 자격 증명은 환경 변수에서만 가져오며 절대 로그에 기록되거나 에코되지 않습니다.

설정

Python ≥ 3.10 및 uv 필요:

uv sync

Related MCP server: mcp-opensearch

구성

모든 설정은 환경 변수(ELOG_ 접두사)입니다:

변수

필수

의미

ELOG_URL

예

하위 디렉터리를 포함한 기본 URL, 예: https://elog.nd280.org/elog

ELOG_USER / ELOG_PASSWORD

아니요

공유 자격 증명

ELOG_LOGBOOKS

아니요

검색 * / 목록 순서에 사용되는 쉼표로 구분된 허용 목록

ELOG_SSL_VERIFY

아니요

true(기본값) / false — 로컬 테스트 외에는 비활성화하지 마세요

ELOG_TIMEOUT

아니요

HTTP 타임아웃(초) (기본값 30)

ELOG_MCP_TRANSPORT

아니요

stdio(기본값) · streamable-http · openapi

ELOG_MCP_HOST / ELOG_MCP_PORT

아니요

HTTP 모드에서 바인딩 주소/포트 (기본값 127.0.0.1:8000)

ELOG_API_KEY

아니요

모든 OpenAPI 엔드포인트에서 Authorization: Bearer <key> 요구

ELOG_CORS_ORIGINS

아니요

openapi 모드용 쉼표로 구분된 CORS 오리진 (기본값 *)

ELOG_MCP_CERTFILE / ELOG_MCP_KEYFILE

아니요

TLS 인증서/키 (PEM) — HTTP 모드에서 HTTPS 제공

모든 배포에 공통 접두사:

export ELOG_URL=https://elog.nd280.org/elog
export ELOG_USER=your-shared-user
export ELOG_PASSWORD=your-shared-password

배포

ELOG_MCP_TRANSPORT는 클라이언트가 서버와 통신하는 방식을 결정합니다:

전송

클라이언트

엔드포인트

stdio(기본값)

Claude Desktop, opencode, 기타 로컬 MCP 호스트

생성된 프로세스

streamable-http

HTTP를 통해 MCP를 사용하는 웹 UI (LibreChat, …)

http://<host>:<port>/mcp

openapi

OpenAPI 도구 서버 (Open WebUI, …)

스펙 /openapi.json, 문서 /docs, 기본 /는 liveness JSON 응답

stdio (로컬 MCP 클라이언트)

uv run elog-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "elog": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/elog-mcp", "run", "elog-mcp"],
      "env": { "ELOG_URL": "…", "ELOG_USER": "…", "ELOG_PASSWORD": "…" }
    }
  }
}

opencode (~/.config/opencode/opencode.json):

{
  "mcp": {
    "elog": {
      "type": "local",
      "command": ["uv", "--directory", "/absolute/path/to/elog-mcp", "run", "elog-mcp"],
      "environment": { "ELOG_URL": "…", "ELOG_USER": "…", "ELOG_PASSWORD": "…" }
    }
  }
}

streamable-http (원격 MCP 클라이언트)

ELOG_MCP_TRANSPORT=streamable-http uv run elog-mcp

UI에서 http://127.0.0.1:8000/mcp를 원격 MCP 서버로 등록하세요.

openapi (Open WebUI 및 기타)

ELOG_MCP_TRANSPORT=openapi \
ELOG_API_KEY=pick-a-random-secret \
uv run elog-mcp

아래 도구를 미러링하는 5개의 읽기 전용 엔드포인트가 있습니다(operationId는 도구 이름과 동일). Open WebUI에서: Settings → Tools → + (사용자 수준, 브라우저에서 가져옴) 또는 Admin Settings → Tools (전역, 백엔드에서 가져옴), 서버 URL을 입력하고 ELOG_API_KEY 값을 Bearer 키 필드에 넣으세요.

HTTPS: ELOG_MCP_CERTFILE/ELOG_MCP_KEYFILE을 전달하거나, 앞에 리버스 프록시 또는 터널(예: cloudflared tunnel --url http://localhost:8000)을 두세요. 로컬에서 신뢰되는 개발 인증서의 경우: mkcert -install && mkcert localhost 127.0.0.1 ::1, 그런 다음 두 파일을 위 변수에 (절대 경로로) 제공하세요.

도달 가능성 규칙 요약:

  • 모든 것은 기본적으로 127.0.0.1에 바인딩됩니다. 다른 사람이 서버에 접근해야 하는 경우 ELOG_MCP_HOST=0.0.0.0과 ELOG_API_KEY를 설정하세요.

  • 클라이언트가 Docker에 있나요? 컨테이너 내부의 127.0.0.1은 여러분의 머신이 아닙니다 — http://host.docker.internal:<port>를 사용하세요 (Linux에서는 --add-host=host.docker.internal:host-gateway).

  • 호스팅된 인스턴스(예: 대학 WebUI)? 여러분의 노트북 루프백에 절대 도달할 수 없습니다. 사용자 수준 도구 서버는 추가로 해당 사이트의 Content-Security-Policy의 적용을 받습니다 — DevTools에서 요청이 Transferred: CSP로 표시되면 브라우저가 차단한 것이며, IT 측의 connect-src 변경만이 도움이 됩니다. 실용적인 방법: elog-mcp를 도달 가능한 곳에 배포하고 관리자가 한 번 전역 도구 서버로 등록하게 하세요.

도구

모든 전송에서 동일한 5가지 작업 (openapi에 대한 REST 경로 표시):

도구

REST 경로

목적

elog_list_logbooks()

GET /logbooks

로그북 목록

elog_search(text?, attributes?, date_from?, date_to?, last_days?, logbook="*", max_results=50, reverse=true)

GET /search (attributes = JSON 객체 문자열)

정규식 전체 텍스트 + 속성 + 날짜 필터링; 발췌문 반환

elog_get_entry(logbook, entry_id)

GET /logbooks/{logbook}/entries/{entry_id}

전체 항목 본문, 속성, 스레딩

elog_get_recent_entries(logbook, count=20)

GET /logbooks/{logbook}/recent?count=N

최신순 바로가기

elog_get_attachment(logbook, filename)

GET /logbooks/{logbook}/attachments/{filename}

Base64 첨부 파일 내용

참고:

  • 텍스트 및 속성 필터는 정규식입니다(elogd 의미론); ^value$ 앵커는 정확히 일치를 제공합니다.

  • 날짜: YYYY-MM-DD[ HH:MM[:SS]], 또는 범위 대신 last_days를 사용하세요; logbook="*"는 알려진 모든 로그북을 검색합니다.

  • 오류는 균일하게 표시됩니다: EntryNotFound, AuthFailed, ServerError, NetworkError, InvalidLogbook (REST 상태 코드: 404/502/502/503/404, 잘못된 쿼리 매개변수 → 400/422).

개발

uv run pytest                # unit tests, offline
uv run pytest -m live        # live suite (needs ELOG_TEST_URL)
uv run ruff check .          # lint
uv run ruff format --check . # formatting gate
uv run mypy src              # type check (strict)

프로토콜 세부 사항 및 와이어 형식 참조는 RESOURCES.md에 있습니다; 아키텍처 및 도구 계약은 SPEC.md에 있습니다.

Available Tools

5 tools
elog_get_attachmentA

Download an attachment (screenshot, config file, ...) as base64 content.

Args: logbook: Name of the logbook holding the attachment. filename: Attachment filename exactly as listed on the entry.

Returns {filename, content_b64, mime, size}; embed via MCP resource mechanisms when presenting to users.

ParametersJSON Schema
NameRequiredDescriptionDefault
logbookYes
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return structure ({filename, content_b64, mime, size}) and advises embedding via MCP resource mechanisms, which is key behavioral context. It doesn't mention error conditions, authentication, or size limits, but for a simple read operation the core behavior is well-covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with explicit 'Args' and 'Returns' sections. The purpose is front-loaded, and every sentence adds value. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema (per context), the description covers all necessary calling information: parameters, return format, and integration guidance. No additional details are needed 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so effectively: 'logbook' is explained as the name of the holding logbook, and 'filename' is specified as the exact name as listed on the entry. This adds critical meaning beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Download') and a concrete resource ('an attachment'), and specifies the output encoding ('as base64 content'). This clearly distinguishes it from sibling tools like elog_get_entry or elog_search, which operate on entries or search results rather than binary attachments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when you need to retrieve an attachment by logbook and filename. It does not explicitly reference alternatives or exclusions, but the purpose is self-evident and matches the tool's name. Since no sibling tool offers attachment downloading, no additional routing guidance is necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elog_get_entryA

Read one logbook entry in full: all attributes, complete body, attachments.

Args: logbook: Name of the logbook containing the entry. entry_id: Numeric message ID of the entry.

Returns the full entry record including the untruncated body text, threading info (reply_to / in_reply_to) and the canonical web URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
logbookYes
entry_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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 meaningful behavioral traits: it returns untruncated body text (a notable distinction from truncated list results), threading info (reply_to/in_reply_to), and the canonical web URL. This directly informs the agent of valuable return characteristics beyond a bare 'reads an entry.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line, followed by a compact Args section and a concise Returns section. The structure is clean and scannable, though the Returns paragraph is slightly redundant with the opening line's mention of attributes, body, and attachments.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool, the description is substantially complete: both parameters are explained, return value structure is disclosed, and the output schema exists to formalize the record shape. Missing only minor context like authentication prerequisites, which is typically not tool-specific for a read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it explains logbook as 'Name of the logbook containing the entry' and entry_id as 'Numeric message ID of the entry.' Both parameters are adequately documented in prose despite the empty schema titles, with no enums or nesting concerns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('one logbook entry in full'), and lists what makes it distinct from siblings: all attributes, complete body, and attachments. The 'in full' phrasing clearly differentiates it from the list/summary tools in the sibling set like elog_get_recent_entries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the right tool when you need a complete single entry rather than a summary or search result, but it never explicitly names alternatives or gives conditions for choosing between them. The 'in full' contrast versus elog_search and elog_get_recent_entries is implied, not stated. No exclusions or when-not-to-use guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elog_get_recent_entriesA

Fetch the newest entries of a logbook, newest first.

Args: logbook: Name of the logbook to read. count: Number of recent entries to return.

Returns {"total": int, "entries": [...]} with excerpts like elog_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
logbookYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses the return format ('Returns {"total": int, "entries": [...]}'), the ordering ('newest first'), and references sibling behavior ('excerpts like elog_search'). This adds meaningful context beyond the schema, though it does not address read-only guarantees, pagination limits, or error conditions, leaving some room for improvement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It leads with the one-sentence purpose, then lists parameters in a clear 'Args:' block, and ends with the return type. No filler or redundancy; every sentence contributes useful information. The most critical info (what it does) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no enums, output schema exists), the description is complete. It states the purpose, parameter meanings, and the return shape, and references sibling behavior for the excerpt format. The presence of an output schema reduces the need to explain return details further, and nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate. It clearly defines both parameters: 'Name of the logbook to read' for logbook and 'Number of recent entries to return' for count. This provides semantics that the schema omits, fully explaining the purpose of each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear action verb and resource: 'Fetch the newest entries of a logbook, newest first.' It identifies the resource (logbook entries) and the ordering (newest first), which distinguishes it from siblings like elog_search (searches by criteria) and elog_get_entry (single entry).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies usage ('when you want recent entries'), but there is no explicit comparison to alternatives or conditions for when not to use this tool. It does not name elog_search or elog_get_entry as alternatives, nor does it describe when they would be more appropriate. Guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

elog_list_logbooksA

List the logbooks available on the configured ELOG server.

Returns a list of {name, description?, url} objects. The optional ELOG_LOGBOOKS environment variable restricts and orders the result.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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 discloses the return format (list of {name, description?, url} objects) and the effect of an optional environment variable (ELOG_LOGBOOKS) that restricts and orders results. This adds meaningful behavioral context beyond a simple 'list' call, though it does not cover potential errors or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first states the purpose immediately; the second provides return format and an optional configuration detail. No redundant wording, no filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with no parameters and an output schema that likely describes the returned objects, the description is complete. It covers what it does, what it returns, and a relevant environment variable. The sibling tools are all entry-focused, so there is no missing context about when to use this tool. No output schema is shown, but the description compensates by describing the return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter meaning. The description adds value by explaining what is returned and mentioning the ELOG_LOGBOOKS environment variable as a configuring influence. This goes beyond the empty schema and justifies a score above the baseline for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb 'List' and a specific resource 'logbooks available on the configured ELOG server'. It clearly distinguishes from sibling tools (elog_search, elog_get_entry, etc.) which all operate on entries rather than logbooks. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need the list of logbooks) but does not explicitly state when to use it vs alternatives or when not to use it. Since siblings are all entry-focused, the context makes the purpose obvious, but no explicit guidance is provided.

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.

  1. 5 tool updatesv0.1.0
    • First observedelog_get_attachment
    • First observedelog_get_entry
    • First observedelog_get_recent_entries
    • First observedelog_list_logbooks
    • First observedelog_search

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation4/5

Each tool maps to a distinct operation (listing logbooks, searching, reading a single entry, browsing recent entries, fetching attachments), so confusion is unlikely. However, elog_get_recent_entries overlaps with elog_search's last_days and reverse options, making the boundary between them slightly less sharp.

Naming Consistency4/5

The elog_ prefix and verb-first style are consistent, and most tools follow a verb_noun pattern such as elog_list_logbooks, elog_get_entry, and elog_get_attachment. elog_search is the one outlier because it omits an explicit object, which is a minor deviation from the otherwise predictable pattern.

Tool Count5/5

Five tools is a well-scoped size for a read-only logbook client. Each tool covers one essential need—discovering logbooks, searching entries, reading full entries, browsing recent entries, and downloading attachments—without unnecessary redundancy or bloat.

Completeness4/5

The read-oriented surface is complete for searching, reading, and retrieving attachments from ELOG entries. The only notable gap is the absence of write or lifecycle tools such as creating, replying to, or editing entries, though this appears to be an intentional read-only scope.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables discovery of HEPData records, tables, and data access with read-only operations and export links.
    9
    13 PyPI
    GPL 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for exploring and searching OpenSearch clusters, enabling log analysis, index exploration, and query execution.
    8
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for Elasticsearch log querying. Enables natural language search, filtering, context retrieval, and aggregation of logs.
    -