Skip to main content
Glama
dkfmaekdnjfk

alt-festival-mcp

by dkfmaekdnjfk

alt-festival-mcp

An MCP server that lets Claude (Desktop or Code) read live notes and transcripts from Alt — a real-time lecture/meeting transcription app — while a recording is in progress.

Built for conference use: keep Alt recording a talk, and ask Claude questions about it live, with Claude pulling only the newly-transcribed lines each time instead of re-reading the whole transcript.

How it works

Alt runs a local HTTP API on your machine (localhost, token-authenticated) that its own apps use internally. This is not officially documented for third-party use, so treat it as unofficial and subject to breaking on Alt updates. This server reads the port/token from Alt's own local config file (~/Library/Application Support/alt/storage-httpServer.json on macOS) at request time and exposes a few read-only operations over MCP. It never stores or transmits the token anywhere else.

Nothing about your Alt data leaves your machine — this server only talks to localhost.

Related MCP server: speak-to-me-mcp

Tools

Tool

Description

list_recent_notes

List recently created/updated Alt notes. The most recent one is usually whatever's being recorded right now.

search_notes

Search notes by title.

get_note_info

Get a single note's title, date, and status.

list_note_components

List what components a note has (transcript, memo, summary, recording, meeting_notes, ...) without fetching their content.

get_note_transcript

Fetch a note's live transcript. Pass sinceIndex (the totalEntries value from your previous call) to get only newly-transcribed lines — avoids re-sending the whole growing transcript on every call.

Requirements

  • Alt installed and running, with its local HTTP server enabled (this is the default).

  • macOS. The config path is currently hardcoded to Alt's macOS data directory; Windows/Linux paths aren't handled yet.

  • Node.js 20+.

Install

git clone https://github.com/dkfmaekdnjfk/alt-festival-mcp.git
cd alt-festival-mcp
npm install
npm run build

Register with Claude Code / Desktop

claude mcp add --scope user alt -- node /absolute/path/to/alt-festival-mcp/dist/index.js

Restart Claude Code/Desktop so it picks up the new server, then start a recording in Alt and ask Claude about it.

Example usage

"Alt에서 지금 녹음 중인 노트 열어서 지금까지 무슨 얘기했는지 알려줘" (Open whatever note Alt is currently recording and tell me what's been said so far)

Claude will call list_recent_notes to find the active note, then get_note_transcript to read it — and on later questions in the same conversation, pass sinceIndex so it only reads what's new.

Disclaimer

This project talks to an internal, undocumented local API that Alt happens to expose on your machine. It is not affiliated with or endorsed by Alt. It may stop working after an Alt update that changes the API shape.

Available Tools

5 tools
get_note_infoGet Alt note infoA

노트 ID로 제목, 날짜, 상태 등 기본 정보를 가져옵니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteIdYesAlt 노트 ID

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must carry the behavioral burden. It makes the read-only retrieval intent clear and specifies which subset of note data is returned (title, date, status), which is useful. However, it does not mention behavior on missing/invalid IDs, permissions, or the exact response format.

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 a single, compact sentence with no filler. It front-loads the core operation and the key returned fields, making it easy for an agent to parse quickly.

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 low-complexity, single-parameter read tool without an output schema, the description is largely sufficient: it identifies the input, the operation, and the expected information categories. Some details such as response shape or error behavior are absent, but the core calling context is clear.

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

Parameters3/5

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 noteId as the Alt note ID. The description only repeats the need for a note ID and adds the context that it returns basic info, but it does not add 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.

Purpose5/5

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

The description states a specific action (get) applied to a note resource identified by note ID, and enumerates the returned fields (title, date, status). This clearly differentiates it from siblings like get_note_transcript or list_note_components, which concern different data or operations.

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 it should be used when you have a note ID and need basic note metadata. However, it does not explicitly say when to prefer this over search_notes, list_recent_notes, or get_note_transcript, so usage guidance remains 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.

get_note_transcriptGet Alt note transcript (incremental)A

노트의 실시간 전사를 가져옵니다. 강의를 계속 따라가려면 매번 sinceIndex에 지난 호출에서 받은 totalEntries 값을 넘겨서 새로 추가된 부분만 받으세요 — 이미 읽은 내용을 다시 보내지 않아 토큰을 절약합니다. 처음 호출할 때는 sinceIndex를 생략하거나 0으로 두세요.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteIdYesAlt 노트 ID
sinceIndexNo이전에 받은 totalEntries 값. 이 인덱스 이후의 새 구간만 반환됩니다.

TDQS

A4.4/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 behavioral burden. It discloses the incremental cursor behavior, token-saving intent, and first-call semantics. It does not address read-only safety or possible side effects, but the core behavioral contract is clearly described.

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?

Three short, focused sentences: purpose, incremental usage pattern, and initial-call handling. Every sentence earns its place and the most important usage detail is front-loaded.

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?

The tool has no output schema and no annotations, so the description must cover the operational loop, which it does by telling the caller to pass totalEntries from the last response. It is complete enough to call the tool correctly, though it does not describe the full response shape.

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 coverage is 100%, so the baseline is 3. The description adds genuine value by explaining how sinceIndex relates to the previous call's totalEntries and how to handle the initial call, going beyond the schema's per-parameter descriptions.

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 clearly states the tool retrieves the real-time transcript of a note, which is a specific verb+resource. The incremental nature is also explicit, and this distinguishes it from siblings like get_note_info or list_note_components.

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 gives excellent practical usage guidance: pass the previous totalEntries to sinceIndex to get only new content, and omit or set to 0 on first call. It does not explicitly mention when-not-to-use or name alternatives, so it stops short of a perfect 5.

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

list_note_componentsList Alt note componentsA

노트에 어떤 컴포넌트(transcript/memo/summary/recording/meeting_notes 등)가 있는지 요약해서 보여줍니다. 전사 본문이 아니라 목록만 필요할 때 사용하세요.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteIdYesAlt 노트 ID

TDQS

A3.8/5.0
Behavior3/5

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 reveals that the tool returns a summary/list of components rather than full content, which is useful. However, it does not explicitly state whether the operation is read-only, what the exact return format is, or how it behaves for notes with no components.

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 in Korean, front-loading the component type list and immediately scoping the intended use case. Every sentence contributes value, and there is no redundant or filler content.

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 single-parameter list tool with no output schema, the description is largely complete: it identifies the resource, the output scope (component summary), and the intended use case. The only notable gap is the lack of detail about the exact return format, but the low complexity keeps this from being a significant issue.

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

Parameters3/5

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

The input schema has 100% description coverage for noteId, described as 'Alt 노트 ID'. The tool description adds only the general context of operating on a note and does not provide additional parameter-level meaning. According to the rubric, high schema coverage anchors this at baseline 3.

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

Purpose4/5

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

The description clearly states that the tool summarizes which components (transcript/memo/summary/recording/meeting_notes) a note has, making the resource and action specific. It also explicitly says it is not the transcript body, which helps distinguish it from get_note_transcript. However, it does not differentiate from get_note_info, which could plausibly return similar component metadata.

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 provides a clear when-to-use signal: use it when only the list of components is needed, not the full transcript body. This implicitly points toward get_note_transcript as the alternative for full transcript content. It does not explicitly address other sibling tools like get_note_info, but the usage context is strong.

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

list_recent_notesList recent Alt notesA

Alt(실시간 전사 도구)에 최근 생성/수정된 노트 목록을 반환합니다. 지금 녹음 중인 강의를 찾을 때 가장 먼저 호출하세요 — 보통 목록의 맨 앞이 현재 진행 중인 노트입니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavior disclosure. It adds useful traits beyond the name: results are ordered by recency and the first item typically corresponds to the in-progress note. It does not mention edge cases such as empty lists, but for a zero-parameter read-only listing this is acceptable.

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?

Two short sentences: the first states the core return value, and the second gives actionable guidance. No filler, no repetition of the tool name or schema, and the most important usage hint is front-loaded.

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 zero-parameter list tool without an output schema, the description covers what is returned, the ordering heuristic, and when to call it. The only minor omission is an explicit note about empty results, which is not critical for this kind of listing.

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 input schema has no parameters, so the baseline for this dimension is 4. The description correctly focuses on result semantics rather than parameter details because there are none to document.

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

Purpose4/5

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

The description names a specific verb ('returns a list'), resource ('recently created/modified notes'), and tool context (Alt real-time transcription). It clearly describes what the tool does, and the 'recent' scope distinguishes it from search_notes, though it does not explicitly name alternatives.

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 gives a concrete trigger: call this first when looking for a lecture currently being recorded, and notes that the front item is usually the active note. It does not state when not to use it or name alternative filtering tools, so it misses full when/when-not guidance.

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

search_notesSearch Alt notesB

제목 등으로 Alt 노트를 검색합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes검색어

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description must carry the full behavioral burden. It only says 'searches by title, etc.' and does not disclose whether content is also searched, whether results are sorted, paginated, or what the output shape is. This is minimal disclosure for a 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.

Conciseness5/5

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

A single, front-loaded sentence that communicates the essential action with no filler. Every word contributes to the meaning.

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

Completeness2/5

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

For a simple one-parameter tool with no output schema and no annotations, the description leaves important gaps: what exactly 'etc.' includes, how results are returned, and any limitations. The agent can guess the purpose but not fully anticipate behavior.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter is already documented as a search term. The description adds a small amount of meaning by indicating the query is matched against titles ('제목 등'). This slightly exceeds the baseline but does not fully explain what 'etc.' covers.

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

Purpose4/5

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

The description states a specific action (search) on a specific resource (Alt notes) with a scope ('by title, etc.'). This is clear and distinguishes it from siblings like list_recent_notes and get_note_info, though the trailing 'etc.' makes the scope slightly fuzzy.

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 intended usage is implied: use this tool to find notes by title. However, there is no explicit guidance on when to prefer it over sibling tools like list_recent_notes, nor any exclusion criteria. The context is inferable but not stated.

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 observedget_note_info
    • First observedget_note_transcript
    • First observedlist_note_components
    • First observedlist_recent_notes
    • First observedsearch_notes

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing recent notes, searching, fetching note metadata, listing components, and retrieving transcripts. Even the two list-ish tools are clearly separated by recency vs. search.

Naming Consistency5/5

All tools use a consistent verb_noun snake_case pattern: list_, search_, get_. The verbs list vs. get also consistently distinguish collection vs. single-item operations.

Tool Count5/5

Five tools is well-scoped for a focused note/transcript retrieval server. Each tool serves a distinct step in the workflow of finding and reading lecture notes.

Completeness4/5

The core workflow of discovering a note and incrementally fetching its transcript is well covered. A minor gap is that non-transcript component types like memo or summary are listed but their actual content cannot be retrieved.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that gives Claude access to YouTube video transcripts. Extract full transcripts, search for keywords with timestamps, and get direct YouTube links to matching moments.
    2
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    A remote MCP server that gives Claude (and ChatGPT/Gemini) persistent read/write access to your own memory: books, games, projects, notes, and freeform facts.
    -