Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ALTO_FIREBASE_BINNoPath to firebase CLI binary
ALTO_FIREBASE_SITENoFirebase Hosting site for publishing timelines
ALTO_FIREBASE_CONFIGNoFirebase web config JSON object
ALTO_FIREBASE_PROJECTNoFirebase project id

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_interview_guideA

START HERE in any Alto session. Returns the interview/build guide (including the non-negotiable closed-system rule §0) plus the user's resumable drafts.

list_projectsA

List the user's Alto projects and the timelines inside them.

create_projectA

Create a project container (Flow 1). kind: studying|writing|research. Name + purpose only — Alto never stores generated blurbs.

create_timelineA

Create a timeline draft from the build brief (Flow 2 §B–§I). brief: {title, subject?, timeline_id?, columns?: 3|5, node_noun?, period_noun?, accent?, entity_axis_label?, entity_axis_singular?, acts: [{label, short?, color?}] (2-7), mode?: 'linear'|'outline' — 'linear' (default) flows nodes through the bands in sequence; 'outline' makes them concepts that CONTAIN one another, one family per band, structure carried by node parent, §D-Outline, axes?: [{label, singular, hide_nav?: bool, values:[{id,name,...}]}] (≤2; hide_nav drops the axis from the nav bar, drawer and legend but KEEPS its card chips and detail pages, and labels those chips with the value name — right for a large uncapped axis such as a course's cases), filters?: [{id, label, source: 'entity'|'axis1'|'axis2'|'acts'|'coverage'|'depth'|'custom', values?: [{id,name}] (custom source only, 2-10), replace_nav?: bool}] (≤2; 'coverage' = auto Solid/Thin from node density; 'depth' = auto Level 1/2/3+ from the containment structure), relations?: [{key,label?,color?}] ('spine' = neutral main thread; other relations get distinct palette colors when color is omitted, so their lines stay tellable apart from the spine. Each label is user-visible: it appears in the on-page line key (desktop nav + mobile drawer) next to a swatch of its line color, for every relation a connection actually uses — so keep labels short, e.g. 'Overrules'), overview_html?, owner_name?, owner_email?}. Filters add canvas filter chips that dim non-matching nodes (they never navigate). Derived sources (entity/axis1/axis2/acts) mirror that dimension's values and assign nodes automatically; 'custom' declares its own values and each node picks one via its filters map in add_nodes. replace_nav makes a mirrored axis1/axis2 filter-only — nav chips, drawer section, legend dot, and per-node card chips are all suppressed (no reachable detail pages) — recommended when that axis has no authored detail sections. On source 'entity' it only swaps the nav chips. period_noun names the horizontal bands on the homepage tile ("Unit", "Act", "Era", …); omit it and the label is derived from the project kind (studying→Unit, writing→Act, research→Phase, default Unit). Entities are set separately via set_entities. Returns validation warnings.

record_materials_consentA

THE HARD GATE (§A). Call only after (1) the user provided real materials in the conversation and (2) they explicitly agreed to the closed-system statement. sources: factual manifest, e.g. [{name:'ConLaw syllabus.pdf', kind:'syllabus'}] — the materials themselves stay in the conversation. Until consent=true, node authoring is locked.

set_entitiesA

Define the entity axis (the chips): ≤12 entities [{id, name, role?, color?, symbol_svg?, sections?: [{h,t}]}]. Omitted colors get a clean palette. Design a unique symbol_svg per entity (guide §C1 has the rules and the exact wrapper) — entities without one all share the same fallback ◆ and become indistinguishable. Detail-page sections must come verbatim from the user's materials (§0).

set_axis_valuesA

Define or extend an extra axis (slot 1 or 2) after the consent gate.

values: [{id, name, role?, color?, symbol_svg?, sections?: [{h,t}]}], upserted by id, so this can be called repeatedly as material arrives. Unlike the entity axis there is no count cap — this is where a course's cases belong, each carrying the student's own brief in sections.

hide_nav keeps the chips on the cards and the detail pages reachable while dropping the axis from the nav bar, drawer and legend, and labels those chips with the value's name rather than a glyph. Set it for anything with more values than a nav row can hold; skip glyph design for it.

§0: sections are verbatim from the user's materials. This tool exists because an axis declared inside create_timeline is authored BEFORE record_materials_consent runs — so axis values carrying real content had no gate. This one is consent-locked like add_nodes.

add_nodesA

Batch-add/update timeline nodes (idempotent upsert by id). Each: {id, act (0-based), tag, title, desc, col?, parent?, entity_ids?, axis1_values?, axis2_values?, filters?: {custom_filter_id: value_id}, sections?: [{h,t}]}. §0: title/desc/sections are authored VERBATIM from the user's materials — never fill gaps, never collapse multi-item arcs into one node. parent (outline mode): the id of the concept that CONTAINS this one; omit it to make this the hub of its unit. Exactly one node per unit has no parent, and a parent must sit in the same unit as its child. A child may be sent before its parent — that only warns until you build. Column guidance (linear mode): alternate sides; 'center' for pivotal beats; omit col for the deterministic fallback. In outline mode col is ignored — the tree decides placement, hubs centred and leaves out to the sides, and the parent→child lines are generated for you, so author only the cross-links that carry their own meaning. Locked until the consent gate is open.

add_connectionsA

Set the full connection list: [[source_id, target_id, relation_key], ...]. Endpoints must be existing nodes; relation_key must be in the brief's vocabulary ('spine' = neutral main thread). Replaces the stored list (send the complete set).

set_overviewA

Optional prose overview panel (HTML paragraphs). Authored from the user's material (§0). Deep-link a node with exactly <a href="#" onclick="showDetail('node','<node-id>')">phrase</a> — at build these become the engine's clickable overview chips. A link whose id is not a live node is demoted to plain text with a build warning, so links are always validated before anything ships.

run_layout_previewA

Cheap layout dry-run: resolves columns + vertical positions and reports world height, per-column balance, and warnings — iterate here before build_timeline.

build_timelineB

Emit the timeline from the engine template, verify it (structure, geometry, no invented slots, and a JS parse check of every emitted script), and store the artifacts (hosted page + offline single-file). Fails with the exact check list on any violation.

publish_timelineA

Publish the built timeline. visibility: 'private' (only the signed-in owner) or 'link' (anyone with the URL). Returns view + offline-download URLs.

get_timelineA

Full draft state for resuming: brief, consent, node ids, connection count, status, urls.

delete_nodesA

Remove nodes from the draft (e.g. after §J scope reconciliation). Connections touching removed nodes are dropped too. In outline mode a concept that still contains others is refused rather than silently orphaning them — delete the subtree, or re-parent the children first.

Prompts

Interactive templates invoked by user choice

NameDescription
alto_interviewRun the Alto new-project / new-timeline interview.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/lukebmandel-debug/alto-connector'

If you have feedback or need assistance with the MCP directory API, please join our Discord server