ScreenApp Legacy MCP Bridge
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ScreenApp Legacy MCP BridgeShow me the summary for my latest recording"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ScreenApp Legacy MCP Bridge
A small, local, read-only Model Context Protocol (MCP) server for people whose ScreenApp recordings live in a legacy, UUID-based workspace.
It solves three problems that can occur together:
Codex completes the browser authorization step but the token exchange fails.
ScreenApp's current MCP endpoint connects to a different or empty account while the recordings remain visible in the older ScreenApp dashboard.
The legacy MCP endpoint can read recordings and transcripts, but does not expose summaries that ScreenApp has already generated and stored.
The bridge runs on your computer. Codex or Claude talks to it over stdio; the
bridge talks to ScreenApp's legacy endpoint using your OAuth token. No credential is
put in the MCP client configuration, and no ScreenApp AI-generation tool is exposed.
This is an independent compatibility project. It is not an official ScreenApp or
OpenAI product. ScreenApp's current supported MCP endpoint ishttps://screenapp.io/app/api/mcp. Try that first for current workspaces.
[!Disclosure] A little obvious - I created this fix using Codex to solve the issues I personally experienced. Hpoe it helps some other punters. I have a paid ScreenApp subscription, the product is ok, a bit clunky definitely more features I'd love for my use case - may get to writing these down? Let me know what your experience is like.
I'm sporadic using this account. Send through any issues and I'll try to be responsive - not setting any expectations.
What this fixes
The failure is not one single bug. It is a compatibility gap between two generations of ScreenApp and one OAuth client behavior.
Layer | What goes wrong | What this bridge does |
Account/workspace | The current MCP endpoint authenticates successfully but sees an empty library or a different account generation. | Connects specifically to the legacy UUID endpoint at |
OAuth | The legacy authorization server advertises | Performs the local OAuth flow itself and sends |
Transport | The older HTTP+SSE MCP transport establishes a session cookie that must be repeated on later POST requests. | Captures the |
Summaries | Legacy MCP's | Adds |
Cost/safety | The legacy server also advertises tools that ask an AI model questions. | Exposes only read-only retrieval and search tools. AI-generation tools are deliberately omitted. |
The relevant Codex behavior is tracked in openai/codex#40928. ScreenApp documents the current MCP endpoint. The legacy URL and response behavior in this project are compatibility observations and may change; they are not presented as ScreenApp's current public contract.
Related MCP server: gilbert-mcp
Architecture at a glance
Codex / Claude Desktop
│ local stdio; no token in client config
▼
ScreenApp Legacy MCP Bridge
├── OAuth login + Keychain or owner-readable file credential store
├── legacy SSE client + mcp-session cookie preservation
└── stored-summary compatibility reader
│ HTTPS + Bearer token
▼
api.screenapp.io/v2This local boundary is intentional. It avoids hosting other people's OAuth tokens, keeps the bridge easy to audit, and works with desktop MCP clients that can start a local command.
Quick start
You need Node.js 20 or newer, Git, and a ScreenApp account that can see the legacy recordings in the browser.
git clone https://github.com/djOsh-03/screenapp-legacy-mcp.git
cd screenapp-legacy-mcp
npm install
npm run build
node dist/cli.js auth login
node dist/cli.js doctorThe login command registers a dedicated OAuth client, opens ScreenApp in your browser,
and waits on a loopback-only callback. On macOS, the resulting credentials are stored
in Keychain. The doctor command confirms the token, legacy SSE session, profile, team
access, and upstream tools without printing profile or recording content.
To verify summary access too, use the UUID shown in a legacy recording URL:
node dist/cli.js doctor --recording-id 11111111-2222-4333-8444-555555555555The example UUID is deliberately fake. Do not paste private recording IDs into issue reports.
Linux and Windows
The same clone, install, build, login, and doctor sequence works on Linux and Windows.
In PowerShell, use node .\dist\cli.js auth login. Linux requires xdg-open to open the
consent page; if browser launch fails on any platform, rerun with --no-open and open the
printed URL manually.
PowerShell equivalents for the path and Codex steps are:
(Get-Command node).Source
(Get-Location).Path
codex mcp add screenapp_legacy -- "C:\absolute\path\to\node.exe" "C:\absolute\path\to\screenapp-legacy-mcp\dist\cli.js"For file storage, set $env:SCREENAPP_CREDENTIAL_STORE = "file" before auth login.
Pass the same non-secret setting to Codex with
codex mcp add --env SCREENAPP_CREDENTIAL_STORE=file ....
macOS is the only platform with an integrated secret store in this release. Linux and Windows default to a plaintext credentials file under the user's configuration directory. Use a single-user machine, protect the account and filesystem, and revoke the OAuth token when the machine is shared or retired.
Add it to Codex
Find the absolute paths on your machine:
command -v node
pwdThe supported CLI path is:
codex mcp add screenapp_legacy -- \
/absolute/path/to/node \
/absolute/path/to/screenapp-legacy-mcp/dist/cli.jsThe equivalent manual entry in ~/.codex/config.toml is:
[mcp_servers.screenapp_legacy]
command = "/absolute/path/to/node"
args = ["/absolute/path/to/screenapp-legacy-mcp/dist/cli.js"]Restart Codex after changing its MCP configuration. There is no url, bearer token,
client ID, or client secret in this block: Codex launches a local stdio server, and the
bridge owns the upstream OAuth compatibility work.
Codex Desktop may not inherit environment variables from your interactive shell. If you
use non-secret overrides such as a file-store location, add them explicitly with
codex mcp add --env KEY=VALUE .... Never place SCREENAPP_ACCESS_TOKEN in Codex config;
authenticate to the selected store before launching Codex.
Useful first prompts are:
“Use
get_profileand tell me which ScreenApp account is connected.”“List my ScreenApp teams, then list five recordings in the relevant team.”
“Get the stored summary for recording UUID
…. Do not generate a new summary.”“Retrieve the complete transcript, following
nextOffsetuntilhasMoreis false.”
See Codex setup for validation and removal steps.
Add it to Claude Desktop
Build the project, complete auth login, then add a local server to Claude Desktop's
configuration:
{
"mcpServers": {
"screenapp-legacy": {
"command": "/absolute/path/to/node",
"args": [
"/absolute/path/to/screenapp-legacy-mcp/dist/cli.js"
]
}
}
}Save this as ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or
%APPDATA%\Claude\claude_desktop_config.json on Windows, then restart Claude Desktop.
This bridge is mainly needed when the official remote connector cannot see an older UUID
library; current ScreenApp accounts should use the official connector.
Tools
All tools are annotated read-only, non-destructive, and idempotent.
Tool | Purpose |
| Confirm the authenticated ScreenApp identity. |
| List accessible ScreenApp teams. |
| Read one team's details. |
| Page through recordings in the active or selected team. |
| Read recording metadata, URLs, author, and duration information. |
| Read existing transcript text or structured segments, with pagination. |
| Search existing transcript content. |
| Read chapters or description already stored by ScreenApp. |
| Read usage and billing counters without consuming credits. |
The upstream assistant_search, ask_recording, and ask_multiple_recordings tools are
not exposed. This prevents an apparently read-only archival workflow from silently
turning into paid or quota-consuming AI generation.
How get_summary behaves
For a UUID recording, the bridge reads the legacy file payload and checks:
data.postProcess.systemPromptResponses.CHAPTERS.responseTextThat value is itself JSON containing chapter titles, timestamps, and notes. If chapters
are absent, the bridge falls back to data.file.description. It can return structured
JSON or readable Markdown:
{
"fileId": "11111111-2222-4333-8444-555555555555",
"title": "Planning session",
"available": true,
"source": "postProcess.systemPromptResponses.CHAPTERS",
"chapters": [
{
"title": "Delivery risks",
"start": "12:40",
"end": "18:05",
"paragraph": "The group compares schedule, supplier, and acceptance risks."
}
],
"description": "",
"warnings": []
}It never asks ScreenApp to create a summary. If processing is still underway, the tool
returns available: false; retry after ScreenApp's dashboard shows that processing has
finished.
The file-detail route andpostProcess shape are an observed legacy web-app interface,
not a documented public ScreenApp API contract. ScreenApp may change them. The parser
is defensive, reports malformed stored data as warnings, and never fabricates summary
text.
Real-world scenarios
Archive a meeting library into Markdown
An organisation wants one Markdown file per historical recording, including title,
source, author, duration, transcript, and ScreenApp's existing summary. An MCP client can
page through list_recordings, call metadata/transcript/summary for each UUID, and write
the files locally. get_transcript pagination prevents long meetings from being
truncated; get_summary reuses stored work rather than spending AI credits.
Diagnose the “connected but empty” account
OAuth can succeed against the current ScreenApp endpoint while returning a new or empty
workspace. Call get_profile, then list_teams, before assuming data was deleted. If the
browser dashboard uses UUID recording URLs and the current endpoint sees no recordings,
the legacy bridge may be the correct connection boundary.
Search historical interviews without generating an answer
Use search_recordings for exact transcript evidence, then retrieve the relevant
transcript segments. Because assistant-search and question-answering tools are absent,
the model cannot accidentally substitute a fresh generated answer for source evidence.
Wait for a newly uploaded video
A new upload may exist before transcription and post-processing finish. Metadata can be available while the transcript or summary is not. Treat that as eventual consistency: wait until the ScreenApp UI reports completion, then retry the read-only tool.
More worked prompts and automation patterns are in Examples.
Credential options
The default is macOS Keychain on macOS and a plaintext, owner-readable file elsewhere.
On POSIX systems the file is created with mode 0600; Windows relies on the user's
filesystem access controls. Prefer Keychain or an equivalent OS secret manager where
available.
Variable | Meaning |
|
|
| Override the Keychain service name. |
| Override the Keychain account label. |
| Override the file-store path. |
| Use a short-lived token directly; takes precedence over saved credentials. |
| Override the legacy MCP URL for testing. |
| Override the legacy REST base URL for testing. |
| Override OAuth discovery for testing. |
| Override the OAuth resource when testing a different MCP URL. |
The application reads the process environment directly and does not load .env files.
Do not put real values in .env files committed to Git. The included .gitignore blocks
common credential files, but secret hygiene remains your responsibility.
Development and verification
npm install
npm run check
node dist/cli.js doctornpm run check performs strict type checking, linting, tests with coverage thresholds,
and a production build. The test suite covers OAuth request placement, refresh behavior,
credential permissions, same-origin cookie forwarding, summary parsing, and MCP tool
registration. Live tests are opt-in because they require a private ScreenApp account:
SCREENAPP_TEST_RECORDING_ID="your-private-uuid" npm run test:liveThe live smoke test starts the built server over stdio, lists its MCP tools, and calls
get_summary. It prints only counts and availability, not the UUID or recording content.
Limits
This project targets legacy UUID-based ScreenApp workspaces. It does not replace the official current ScreenApp connector.
The legacy HTTP+SSE transport is deprecated in MCP, but remains necessary for the old ScreenApp endpoint. The public-facing local server uses current stdio MCP APIs.
Stored-summary access depends on an observed legacy response field that may change.
The bridge is deliberately read-only. It cannot upload, edit, delete, share, or create ScreenApp content.
It does not expose ScreenApp tools that generate AI answers.
For deeper detail, read Architecture, OAuth compatibility, and Troubleshooting.
License
MIT. See LICENSE.
Available Tools
9 toolsget_profileGet ScreenApp profileARead-onlyIdempotent
Read the profile for the authenticated ScreenApp account. Useful for confirming which account OAuth selected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the OAuth account confirmation context, but does not disclose additional behavioral traits such as response format, rate limits, or authentication requirements. Given the rich annotations, the bar is low and the description offers a modest addition.
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. It front-loads the core purpose and then adds a concrete use case. 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?
For a zero-parameter, read-only tool with comprehensive annotations, the description fully covers what an agent needs: what the tool does and when to call it. No output schema exists, but specifying the return format is not necessary for selecting or invoking the 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?
There are zero parameters and the input schema is empty, so schema coverage is trivially 100%. The baseline for 0 parameters is 4, and the description correctly omits any parameter details since none exist. No compensation is needed.
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 a specific verb ('Read') and resource ('profile for the authenticated ScreenApp account'), and adds a concrete use case (confirming which account OAuth selected). This distinguishes it from sibling tools like get_recording or get_team, which target different resources.
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 mentions when the tool is useful ('confirming which account OAuth selected'), giving agents a clear trigger for invocation. It does not explicitly state when not to use it or name alternatives, but for a zero-parameter read-only tool, the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recordingGet ScreenApp recordingARead-onlyIdempotent
Get metadata for one legacy ScreenApp recording. Use get_transcript for transcript text and get_summary for its stored summary.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | ScreenApp recording/file UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds the 'legacy' qualifier, which is useful context (implies there may be non-legacy recordings). It doesn't contradict annotations and adds a small but relevant detail beyond the structured fields.
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?
Two sentences, zero filler. The first sentence states purpose and scope; the second routes to alternatives. All information is front-loaded and 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?
For a simple read-only metadata retrieval with one well-documented parameter and safety covered by annotations, the description is complete. It specifies the resource type ('legacy'), gives alternatives for other data, and no output schema exists so return format explanation is not required. Nothing an agent needs to call it correctly is missing.
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% for the single parameter fileId, with a clear description ('ScreenApp recording/file UUID'). The description does not add parameter-specific detail, but none is needed since the schema fully documents it. 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 ('Get metadata') and the resource ('one legacy ScreenApp recording'). It also explicitly differentiates from siblings by directing transcript text to get_transcript and stored summary to get_summary, so the agent knows exactly what this tool does not return.
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 explicit when-to-use guidance: it tells the agent to use get_transcript for transcript text and get_summary for its stored summary. This makes it clear that this tool is for metadata only, and names the alternatives precisely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryGet stored ScreenApp summaryARead-onlyIdempotent
Read the summary ScreenApp already stored for a UUID recording. This is read-only and does not generate an answer or consume Ask AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | ScreenApp recording/file UUID | |
| format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| fileId | Yes | |
| source | Yes | |
| chapters | Yes | |
| warnings | Yes | |
| available | Yes | |
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds value by noting that it does not generate an answer and does not consume Ask AI credits, which is meaningful context beyond the annotations. It does not describe the return format, but an output schema exists to cover that.
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?
Two sentences with no redundancy. The core purpose is front-loaded, and the clarifying detail about read-only behavior and credits is concise. 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?
For a simple read operation with an output schema present, the description is complete. It states what the tool does, clarifies it is read-only, and disambiguates from generation. No prerequisites or edge cases are left unexplained, and the sibling tools cover other recording-related operations.
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 50%: fileId has a clear description ('ScreenApp recording/file UUID'), but format lacks an explicit description. The tool description does not mention either parameter, so it adds no extra meaning. However, format is self-explanatory via its enum (json/markdown) and default, so the schema already provides sufficient guidance. The description does not compensate for the missing format description, but the gap is minor.
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 ('Read') and a specific resource ('summary stored for a UUID recording'), making the tool's purpose unmistakable. It also clarifies that it is read-only and does not generate an answer, which distinguishes it from potential generation-oriented siblings like get_transcript or an Ask AI feature. The title reinforces the same meaning.
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 context: use this when you want the existing summary for a recording, and explicitly states that it does not generate an answer or consume Ask AI credits, so it should not be used for generation. However, it does not name specific alternative tools (e.g., get_transcript for transcripts), so the when-not is 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_teamGet ScreenApp teamARead-onlyIdempotent
Read details for one ScreenApp team.
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | ScreenApp team ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds only the 'one team' scope, reinforcing the read-only nature but offering no additional behavioral context such as response contents or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the operation and resource with no filler. Every word contributes.
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 one-parameter read operation with comprehensive annotations and full schema coverage, the description is adequate. It does not explain what details are returned, but this is minor given the tool's simplicity and the absence of an output 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 coverage is 100% and the only parameter, teamId, is already described as 'ScreenApp team ID' in the schema. The description does not add any new semantic detail beyond the schema, 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 clearly identifies the operation ('Read details') and the resource ('one ScreenApp team'), which distinguishes it from sibling tools like list_teams that enumerate teams and get_recording that targets recordings. The scope is explicit: one team.
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 makes the context clear: use this when you need details for a single team, not when listing teams. However, it does not explicitly name alternatives or when-not conditions, so it stops short of the ideal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcriptGet ScreenApp transcriptBRead-onlyIdempotent
Read an existing transcript. Long transcripts are paginated; continue with nextOffset while hasMore is true.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fileId | Yes | ScreenApp recording/file UUID | |
| format | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description adds a meaningful behavioral fact: long transcripts are paginated and the caller should follow nextOffset while hasMore is true. It also warns implicitly that a single response may be incomplete. This is useful context beyond the structured annotations, with no contradiction.
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?
Two sentences with no filler: the first states the core operation, and the second gives the only extra behavior the caller needs. It is appropriately front-loaded and 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 read-only, idempotent get with no output schema, the description covers the main operation and the pagination loop, while annotations cover safety. However, it does not clarify what nextOffset maps to in the input (offset), how format changes the result, or how transcript differs from get_summary, so an agent still has questions on first call. Useful but not fully complete.
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 only 25%: fileId has a description, while limit, offset, and format do not. The description mentions pagination and nextOffset/hasMore but never ties these to the offset parameter or explains format/limit semantics. As a result, the description does not compensate for the low schema 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 opens with 'Read an existing transcript,' naming a specific verb and resource, and the title reinforces the target. It does not explicitly contrast with sibling tools like get_recording or get_summary, so the agent must infer which resource is meant from the noun alone. Overall clear, but sibling differentiation is implicit rather than stated.
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?
There is no statement about when to choose this tool over list_recordings, get_recording, search_recordings, or get_summary. The only use-oriented information is the pagination instruction, which concerns iteration rather than tool selection. This leaves the agent without alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_statsGet ScreenApp usageARead-onlyIdempotent
Read ScreenApp usage and billing counters. This does not consume credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the non-obvious behavioral fact that calling this tool does not consume credits, which is valuable beyond the annotations and not contradicted by them.
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?
Two sentences, with the core purpose front-loaded and the second sentence adding only the non-obvious credit assurance. Every word earns its place and nothing extraneous is included.
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 tool with rich annotations, the description is complete: it states the resource, the type of data, and a behavior that matters to callers. No output schema is present, so the description's high-level promise of usage and billing counters is sufficient guidance.
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?
There are no parameters, so the schema carries no parameter meaning to compensate for; the 0-param baseline of 4 applies. The description's mention of 'usage and billing counters' adequately frames what the returned data represents.
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 names a specific verb, 'Read', and a distinct resource, 'ScreenApp usage and billing counters,' which clearly separates it from the recording-, transcript-, profile-, and team-oriented siblings. The title reinforces the resource without ambiguity.
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 'Read ScreenApp usage and billing counters' provides clear context for when to call the tool, and 'This does not consume credits' signals it is a low-cost informational call. It does not explicitly name sibling alternatives or exclusions, but none are needed for a zero-parameter read-only counter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recordingsList ScreenApp recordingsARead-onlyIdempotent
List recordings from the last active ScreenApp team or a specified team.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results | |
| offset | No | Pagination offset | |
| teamId | No | ScreenApp team ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds the behavioral nuance of team selection (last active vs. specified), which is useful context beyond annotations. However, it does not disclose pagination behavior, ordering, or result format, which would enhance transparency. The added team-scoping detail justifies a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the action and scope. It is front-loaded with the core purpose and contains no filler or redundant phrasing. 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?
For a straightforward list operation with full schema coverage and no output schema, the description covers the essential context: what is listed and the team scoping option. It does not explicitly mention pagination or ordering, but the limit/offset parameters are already documented in the schema, and the tool's simplicity means the description is adequate for an agent to invoke 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 description coverage is 100%, so all three parameters (limit, offset, teamId) are already documented with descriptions. The description's mention of 'specified team' reinforces teamId but adds no new syntax or format details beyond the schema. Per baseline rules, a score of 3 is appropriate when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list recordings) and the resource (ScreenApp recordings), with an explicit scope: 'last active ScreenApp team or a specified team.' This distinguishes it from sibling tools like get_recording (single item) and search_recordings (search functionality), making its purpose 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?
The description implies usage context by mentioning team scoping (last active vs. specified), but it does not explicitly state when to prefer this over alternatives like search_recordings or get_recording. No exclusions or alternative routing are provided, leaving the agent to infer from the tool's name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamsList ScreenApp teamsARead-onlyIdempotent
List teams available to the authenticated ScreenApp account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the scoping detail 'available to the authenticated ScreenApp account,' which is useful but stops short of describing output format, pagination, or any side effects. No contradiction with annotations.
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?
A single, front-loaded sentence that states the action and resource with no extraneous words. Every part of the description 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 zero-parameter, read-only list operation, the description supplies the essential purpose and scope. The absence of an output schema is a minor gap, but the description is otherwise sufficient for an agent to invoke the tool 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 zero parameters and schema coverage is 100%, so there is no parameter information to supplement. Per the baseline for zero-parameter tools, a 4 is appropriate since the description cannot add value 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 the specific verb 'List' with the resource 'teams' and scopes it to the authenticated account. This clearly distinguishes it from the sibling get_team, which implies a singular fetch, and from list_recordings, which targets a different resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_team or search_recordings. There is no mention of prerequisites, filtering, or when a different sibling would be more appropriate, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordingsSearch ScreenApp transcriptsARead-onlyIdempotent
Search existing transcript text without asking ScreenApp to generate an AI answer.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| teamId | Yes | ScreenApp team ID | |
| ownerIds | No | ||
| parentIds | No | ||
| createdAfter | No | ISO 8601 date/time | |
| createdBefore | No | ISO 8601 date/time |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description is not responsible for safety. It adds a meaningful behavioral boundary—no AI answer generation—which implies lower cost/latency, but it does not disclose result shape or pagination. 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?
One compact, front-loaded sentence with no filler; the distinction from AI answers is included economically. Structure is excellent.
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 search tool with six parameters and no output schema, the description captures intent and boundary but leaves return format, pagination, and optional filter behavior unexplained. The strong annotations cover safety, so this is acceptable but not comprehensive for a new agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies that query targets transcript text, which is useful because the query property has no schema description. But it ignores ownerIds/parentIds and filter semantics, and schema description coverage is only 50%. It adds only minimal value beyond the obvious.
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 precise action and object—'Search existing transcript text'—and immediately flags what it is not: an AI-generated answer. This distinguishes it from sibling tools like get_summary without requiring the schema.
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?
Clearly indicates the appropriate context: raw transcript lookup rather than AI-generated answers. However, it never names the alternative tool explicitly and gives no detailed when-to-use versus get_transcript or get_summary, so the routing is clear but implicit.
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.
9 tool updates
v0.1.1- First observed
get_profile - First observed
get_recording - First observed
get_summary - First observed
get_team - First observed
get_transcript - First observed
get_usage_stats - First observed
list_recordings - First observed
list_teams - First observed
search_recordings
TDQS
Scored across 9 tools
Most tools target distinct resources and actions, and get_recording explicitly points to get_transcript and get_summary. The only possible confusion is between list_recordings and search_recordings, but the descriptions clarify that search is transcript-text based.
All tool names follow a consistent verb_noun snake_case pattern: list/get/search. This makes the tool API predictable and easy for an agent to navigate.
Nine tools is well-scoped for a read-only legacy bridge covering recordings, transcripts, summaries, teams, profile, and usage. Each tool serves a clear purpose without unnecessary bloat.
For the apparent read-only bridge purpose, the surface is complete: discovery, metadata, transcript, summary, team, account, and usage data are all covered. There are no obvious dead ends for a legacy data-access workflow.
Maintenance
Related MCP Connectors
Read-only MCP access to authorized Vocci sessions, notes, files, and memory search.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
- SupercutOAuthai.supercut
Read recordings, transcripts, frames, and comments with your permissions.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePublic read-only MCP server for FoxTrove Voice, enabling LLMs to query call logs, customer records, assistant stats, and analytics via secure OAuth.MIT
- AlicenseAqualityDmaintenanceRead-only access to your Gilbert meetings, transcripts and summaries over MCP — list, search, and fetch transcripts and summaries.523 npm1MIT
- AlicenseCqualityBmaintenanceGives MCP-aware AI tools read access to ClassQuill tutoring-business data via a read-only proxy over the ClassQuill public API.5945 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only, natural-language access to Plaud recordings, including listing recordings, retrieving speaker-attributed transcripts, AI-generated summaries, action items, and user data through MCP tools.MIT