Tulip MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ENABLED_TOOLS | No | Comma-separated list of enabled tools. Can include individual tool names (e.g., listStations), security categories (read-only, write, admin), or resource types (table, machine, user, app, interface, station, station-group, utility). Default is read-only and table tools. | |
| TULIP_API_KEY | Yes | Your Tulip API key | |
| TULIP_BASE_URL | Yes | The URL you use to access Tulip (e.g., https://my-company.tulip.co) | |
| TULIP_API_SECRET | Yes | Your Tulip API secret | |
| TULIP_WORKSPACE_ID | No | Your workspace ID (found in your Tulip URL after /w/). Only required if using an Account API key from Account Settings. Leave empty if using a Workspace API key from Workspace Settings. |
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
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| countTableRecordsA | Counts records in a Tulip Table. Corresponds to GET /tables/{tableId}/count. Requires |
| getInterfaceA | Gets details about a specific interface. Corresponds to GET /api/stations/v1/interfaces/{interfaceId}. Requires |
| getStationA | Gets details about a specific station. Corresponds to GET /api/stations/v1/stations/{stationId}. Requires |
| getStationGroupA | Gets details about a specific station group. Corresponds to GET /api/stations/v1/station-groups/{stationGroupId}. Requires |
| getTableA | Gets details about a Tulip Table. Corresponds to GET /tables/{tableId}. Requires |
| getTableAggregationA | Looks up a table aggregation for a Tulip Table by id. Corresponds to GET /tables/{tableId}/aggregation/{aggregationId}. Requires |
| getTableLinkA | Fetches information about a table link. Corresponds to GET /tableLinks/{tableLinkId}. Requires |
| getTableQueryA | Looks up a table query for a Tulip Table by id. Corresponds to GET /tables/{tableId}/query/{queryId}. Requires |
| getTableRecordA | Gets a specific record from a Tulip Table. Corresponds to GET /tables/{tableId}/records/{recordId}. Requires |
| getUserA | Gets details about a specific user. Corresponds to GET /api/users/v1/users/{userId}. Requires |
| getUserGroupA | Gets details about a specific user group. Corresponds to GET /api/users/v1/user-groups/{userGroupId}. Requires |
| getUserGroupUsersA | Gets users in a specific user group. Corresponds to GET /api/users/v1/user-groups/{userGroupId}/users. Requires |
| getUserRoleA | Gets details about a specific user role. Corresponds to GET /api/users/v1/roles/{userRoleId}. Requires |
| listAppGroupsA | Retrieves a list of all Tulip App Groups and their containing apps. Corresponds to GET /appGroups. Requires the |
| listInterfacesA | Gets a paginated, filtered, and sorted list of interfaces. Corresponds to GET /api/stations/v1/interfaces. Requires |
| listMachineTypesA | Retrieves a list of all Tulip machine types and their corresponding machines. Corresponds to GET /machines. Requires the |
| listStationAppAssignmentsA | Gets app assignments for a station. Corresponds to GET /api/stations/v1/stations/{stationId}/app-assignments. Requires |
| listStationGroupAppAssignmentsB | Gets app assignments for a station group. Corresponds to GET /api/stations/v1/station-groups/{stationGroupId}/app-assignments. Requires |
| listStationGroupsA | Gets a paginated, filtered, and sorted list of station groups. Corresponds to GET /api/stations/v1/station-groups. Requires |
| listStationsA | Gets a paginated, filtered, and sorted list of stations. Corresponds to GET /api/stations/v1/stations. Requires |
| listTableAggregationsA | Lists the aggregations for a Tulip Table. Corresponds to GET /tables/{tableId}/aggregations. Requires |
| listTableQueriesA | Lists queries for a Tulip Table. Corresponds to GET /tables/{tableId}/queries. Requires |
| listTableRecordsA | Lists records of a Tulip Table. Corresponds to GET /tables/{tableId}/records. Requires |
| listTablesA | Retrieves a list of all Tulip Tables. Corresponds to GET /tables. Requires |
| listUserGroupsA | Gets a list of user groups. Corresponds to GET /api/users/v1/user-groups. Requires |
| listUserRolesA | Gets a list of user roles. Corresponds to GET /api/users/v1/roles. Requires |
| listUserUserGroupsA | Returns an array of user group IDs that the user is currently a member of. Corresponds to GET /api/users/v1/users/{userId}/user-groups. Requires |
| listUsersA | Gets a list of users. Corresponds to GET /api/users/v1/users. Requires |
| retrieveMachineActivityArchiveA | Retrieves machine activity archive status. Corresponds to GET /machines/archive/csv/{jobID}. Requires |
| runTableAggregationB | Runs an aggregate function on a table field. Corresponds to GET /tables/{tableId}/runAggregation. Requires |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 30 tools
Every tool has a clearly distinct purpose targeting specific resources and actions. Tools are organized by domain (tables, stations, users, machines) with no overlapping functionality - for example, getTableRecord retrieves a single record while listTableRecords retrieves multiple, and countTableRecords provides a count. The descriptions clearly differentiate each tool's scope.
The naming follows a consistent verb_noun pattern throughout all 30 tools. All tools use camelCase with clear action prefixes (get, list, count, run, retrieve) followed by specific resource names. This creates a predictable and readable naming convention across the entire toolset.
With 30 tools, this is borderline heavy for an MCP server. While the tools cover multiple domains comprehensively, the count approaches the upper limit of what's typically manageable. The server covers tables, stations, users, and machines, but 30 tools might be overwhelming compared to more focused servers with 10-15 tools.
The tool surface is severely incomplete as all tools are read-only operations. There are no create, update, or delete operations for any resources, creating significant gaps that will cause agent failures when trying to perform full lifecycle management. While the read operations are comprehensive within their scope, the lack of write capabilities represents a major limitation.