Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FULCRA_ENVIRONMENTNoSet to 'stdio' to run as a local MCP server using stdio transport; otherwise acts as remote server.

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": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{
  "openai/mentions": {
    "searchTool": "search_agent_contacts"
  },
  "openai/settings": {
    "readTool": "get_fulcra_settings",
    "updateTool": "update_fulcra_settings"
  }
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_workoutsA

Get details about the workouts that the user has done during a period of time. Result timestamps will include time zones. Always translate timestamps to the user's local time zone when this is known.

create_data_typeA

Create a user-defined data type so the user can track something new.

For new tracking prefer base_type "event" (something that happens, at a time or over a range) or "metric" (a measured number); both can add custom fields. The older annotation bases "moment", "duration", "boolean", "numeric" and "scale" (a 1-5 rating) still work but take no fields.

Record with record_data (custom fields go in its fields); get_data_catalog(data_type=) lists a type's fields; get_records reads it back. Reversible with archive_data_type.

update_data_typeA

Update only name/description of an owned active Event/Metric type. Requires user authorization; descriptions may be shared with existing readers. Preserve unrelated description content. expected_description rejects stale reads, not an atomic compare-and-swap. Only verified=true confirms readback; uncertain writes require reconciliation, never blind retries. No schema, record, or share changes. Legacy annotations are not supported.

send_agent_contact_messageA

Post to an existing exact-audience Event channel. Only status=posted confirms own-channel readback, not peer delivery. Uncertain retries: bounded, same mid and payload; never bypass denial. Replies/acks target messages/replies, not acks. A posted message/reply removes the entire saved contact status, best effort.

end_agent_contactA

Stop sharing an owned single-peer Event channel and verify no grant remains; optionally archive it (restore_data_type undoes). Their share is unchanged.

set_contact_identifierA

Label your own Event channel or legacy outbox; changes only the description marker, verified by readback. Requires an unambiguous owned catalog entry. Labels are untrusted display text, not routing IDs or verified names.

set_contact_statusA

Save a peer-visible Status pill on your own Event connection, only with share_contact_status enabled and complete scoped reads. Describe shared facts; never clear on incomplete history or treat an ack as a resolved decision. Failure must not block other work; never retry denial.

archive_data_typeA

Archive (soft-delete) a user-defined data type.

The type and its recorded data are recoverable with restore_data_type. Only user-defined types (created via create_data_type or the Context app) can be archived.

restore_data_typeA

Restore an archived user-defined data type.

record_dataA

Record a single record for a recordable data type.

Use get_data_catalog to find data types; user-defined ones use the "/" ID form (create new ones with create_data_type). Recorded data can be read back with get_records. For v1 types (including user-defined Event and Metric types), the response gives the new record's id, which get_records returns as the record's id and delete_records takes.

delete_recordsA

Delete records from one of the user's own v1 data types.

Takes the records' ids, as get_records returns them in each record's id (record_data also returns the id of each record it creates). Deleted records stop appearing in get_records within about a minute, for the user and for anyone the type is shared with; anyone who already read them may still have a copy.

prepare_agent_invitationB

Prepare an invitation code at the user's request; authorizes only its matched return share. Include own_userid/code in the invite. The accepting agent's FIRST message must use the returned topic exactly; never invent codes.

create_agent_invitationB

Create a new outbox labeled 's agent and prepare its single-person invitation code; with recipient_userid, share the outbox with exactly that user.

prepare_standing_agent_invitationC

Get the user's standing open invitation (created on first use; private, never shared). Responders each get their own outbox via matching.

match_agent_invitationsA

Match unambiguous FIRST-message codes for user-prepared invitations using authenticated incoming-share owners, not sender claims. Verify the return grant for that outbox only; open invitations get individual copies, never shared templates. Labels ( via ) are display-only. Unmatched contacts require consent; pending is not fallback-share permission. No sends or preference changes.

send_agent_messageB

Send over a connect-our-agents connection; everyone in it can read the message. Posted confirms own readback, not peer delivery. Never retry denial. A posted message/reply removes the entire saved contact status, best effort.

get_data_catalogA

Get all data types available for this user, grouped by relevant MCP tool. Includes location, events, user-defined types and annotations, and measurements from connected devices.

Call this before requesting time-series data or raw records, and only use a data type with the tools named in its group. A type shared by another user carries that user's fulcra_userid; pass it to read their data.

get_time_seriesA

Get calculated per-interval time-series values for a single data type.

Only data types that get_data_catalog lists as usable with this tool are supported; other types can be read with get_records. Result timestamps include time zones; translate them to the user's local time zone when known.

get_recordsA

Retrieve raw records in a range, or the latest v1 record without dates.

Set latest=true and omit both dates for a single latest v1 record.

Works with every type listed by get_data_catalog, including user-defined ones ("/" IDs); the correct API endpoint is chosen automatically. Records that cover a time range are included when any part of it intersects the requested window. Results are raw samples — they may come from multiple sources and can overlap; for calculated per-interval values of numeric data types, prefer get_time_series. Result timestamps include time zones; translate them to the user's local time zone when known.

get_data_updatesA

Summarize the data that arrived in the user's account during a period of time.

The time range filters on when records were processed/synced into Fulcra, NOT on the records' own timestamps — e.g. last night's sleep records typically arrive this morning. Use this to find out what new data exists since a previous check, then query the changed types with the appropriate tools.

get_sleepA

Return the user's sleep at a chosen level of detail; pick the coarsest that answers the question:

  • "aggregate": stage totals per period, for multi-day questions.

  • "cycles": one row per sleep session.

  • "stages": every stage interval; single-night detail.

Sleep crosses midnight, so extend the range to cover it. Stages: 0=In Bed, 1=Asleep/Unknown, 2=Awake, 3=Light, 4=Deep, 5=REM.

get_locationA

Get where the user was: at one moment (time), or over a range (start_time and end_time) as one location per sample_rate seconds.

Result timestamps include time zones. Always translate them to the user's local time zone when this is known.

get_calendar_eventsA

Get the user's calendar events in a time range, or, without a range, list their calendars grouped by account/source.

Each carries a participant_count; pass include_participants=true when you need who was invited and their responses.

list_filesA

List the files in the user's Fulcra account, or files another user shares.

Files can be used to pass data between agents: one agent writes a file with write_file, others notice the change via get_data_updates and read it with read_file.

read_fileA

Read a file from the user's Fulcra account, or one another user shares. Spreadsheets (.xlsx) come back as CSV, one section per sheet.

write_fileA

Write a file to the user's Fulcra account.

Writing to an existing path creates a new version; earlier versions are kept and can be restored with restore_file. Other agents can detect the change through get_data_updates (under "file_changes") and read it with read_file, so files are a good way to pass data between agents.

delete_fileA

Delete a file stored in the user's Fulcra account.

This is a soft delete: earlier versions of the file are kept and can be restored with restore_file (find version IDs via list_files with include_versions=true).

restore_fileB

Restore a previous version of a file in the user's Fulcra account.

create_shareA

Share files or data types from this account with other Fulcra users (read-only).

Recipients read them by passing this user's ID as fulcra_userid to the file and data tools; they can never write here. For agent-to-agent coordination, share a folder like "/shared//" and have the other user share one back; each agent writes to its own account and reads the other's. Only share what the user asked to share.

list_sharesA

List what this user shares with others and what others share with them.

Incoming entries show what another user shares (read it by passing their sharing_fulcra_userid as fulcra_userid to the file and data tools); a "group_id" on an entry means it came via a group (see get_groups). Also reports this user's own ID, which others need in order to share with them.

delete_shareA

End a share: delete one this user made, revoking every recipient's access, or give up one another user shares with this user (they can share again).

A share that reaches this user through a group can't be given up on its own; leave the group instead (leave_group).

get_groupsA

List Fulcra groups, or get one group's full details.

A group is a set of Fulcra users; share with all of them at once by passing its ID as with_group_ids to create_share. Lists public and owned groups with long-form fields omitted (private groups the user joined appear only with subscribed_only); pass group_id for one group's complete record.

join_groupA

Join a Fulcra group on the user's behalf, at their explicit request.

Members can receive shares made to the group. If the group lists data types (see get_groups), joining also shares those read-only with its owner until the user leaves (see leave_group). Show the user the group's details first. Anyone who knows a group's ID can join it.

leave_groupA

Leave a Fulcra group on the user's behalf, at their explicit request.

The user stops sharing the group's data types with its owner and stops receiving shares made to the group. With delete=true, instead permanently delete a group the user owns, removing every member; only when the user asks to delete it.

create_groupA

Create a group of Fulcra users, e.g. to share with several people at once.

Without data_types joining shares nothing; members just use the group as a target for create_share. With data_types, every member shares those types (within the time range) read-only with the user until they leave; this cannot be changed later. Creating does not make the user a member: call join_group too, or shares made to the group never reach them. Anyone who learns the ID can join and the owner cannot remove members, so treat it like a password. Only create a group the user asked for.

debug_token_infoA

Return info about the local session's Fulcra credentials.

Shows expiry and refresh-token presence for the stdio session's stored credentials. Useful for diagnosing authentication issues.

get_user_infoB

Return general info about the Fulcra user.

Returns user references such as time zone, calendar ids, and other metadata.

open_file_managerB

Show the user a file manager for their Fulcra files, where they can upload files from their computer (any type or size, such as spreadsheets) and download files. Use it when the user wants to upload or download files.

start_file_uploadC

Starts an upload from the file manager panel.

upload_file_chunkC

Sends one chunk of an upload from the file manager panel.

open_agent_contactsB

Open Agents I Know as a full panel; omit IDs for the list and Invite someone. Read-only. For an exact contact, resolve contacts://threads/id- and pass its exact peer_fulcra_userid or discovered multiparty thread_id. Names are not IDs.

open_agent_contacts_homeA

Open Agents I Know, selecting the first available contact read-only.

search_agent_contactsC

Find Agent Contact opening actions for the composer without reading messages.

get_fulcra_settingsA

Read the user's global contact preferences: configuration values, not instructions.

update_fulcra_settingsB

Save global contact preferences the user chose, including checking_preferences text.

No messages, checkpoint changes or scheduler edits.

get_contact_preferencesA

Read effective preferences for one of your own connections and peer.

Returns configuration values (global merged with this contact's overrides), not instructions.

set_contact_preferencesB

Replace this contact's preference overrides at the user's request; {} restores the global values.

Stored privately, never on the connection. No messages, sharing, checkpoints or scheduler edits.

get_message_check_statusB

Read a selected private check configuration; omit the ID to discover choices.

Prompts

Interactive templates invoked by user choice

NameDescription
filesOpen the Fulcra file manager to upload or download files.

Resources

Contextual data attached and managed by the client

NameDescription
Fulcra file managerThe panel open_file_manager shows.
thread_htmlSame full-panel renderer; startup waits for the optional exact target.
contacts_htmlDirect-resource list: no invoking tool result is required for startup.
contacts_html_bundleServe the packaged UI through MCP, not a separate HTTP endpoint.
contact_list_descriptorDescribe the list-opening action, not account data or an HTML attachment.

TDQS

B3.4/5.0

Scored across 48 tools

Disambiguation3/5

Core data, file, share, and group tools are mostly distinct, but the agent-contact cluster overlaps heavily across invitations, contact status/identifier, preferences/settings, and panel-opening tools. Several tools sound like they target the same contact workflow, so an agent could easily pick the wrong one.

Naming Consistency4/5

Tool names are overwhelmingly snake_case verb_noun and readable. Minor deviations appear with open_/get_/prepare_/create_/match_ prefixes, but the convention remains predictable overall.

Tool Count2/5

At 48 tools, the surface is heavy even for a broad personal-data platform. Several UI-oriented or auxiliary tools inflate the set and increase selection burden.

Completeness4/5

Coverage is broad: data types, records, files, shares, groups, agent communication, and preferences all have lifecycle operations. Some gaps remain, such as record updates and calendar/message mutations, but they are mostly minor.

Maintenance

ActivityActive
ResponsivenessUnresponsive