alga-psa-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NODE_ENV | No | Set to development for the insecure local-dev bypass. | |
| AUTH_MODE | No | HTTP authentication mode: gateway (default for HTTP) or env. Stdio always uses environment credentials. | gateway |
| LOG_LEVEL | No | Log level: debug, info, warn, or error. Default info. | info |
| ALGA_API_KEY | No | API key for the Alga user this connection acts as. Required in standalone mode. | |
| MCP_HTTP_HOST | No | Bind host. Default 0.0.0.0 with S2S; insecure dev forces 127.0.0.1. | 0.0.0.0 |
| MCP_HTTP_PORT | No | HTTP listener port. Default 8080. | 8080 |
| MCP_TRANSPORT | No | Transport when using the HTTP entry point. Defaults to stdio; Docker defaults to http. | stdio |
| ALGA_TENANT_ID | No | Optional tenant ID. Leave blank unless Alga support asks for it. | |
| ALGA_TOOL_TIERS | No | Comma-separated tool tiers the container serves. Only read is valid. Default read. | read |
| ALGA_INSTANCE_URL | No | The https:// address you use to sign in to Alga, for example https://psa.example.com. A trailing / or /api/v1 is fine; leave off any other path. Required in standalone mode. | |
| MCP_ALLOWED_HOSTS | No | Optional comma-separated Host header allowlist for /mcp (with or without port). | |
| CONDUIT_S2S_SECRET | No | Required for HTTP; at least 32 characters. Used to validate the gateway S2S proof. | |
| MCP_ALLOW_INSECURE_DEV | No | Exactly 1 permits HTTP without S2S only on loopback, and only with NODE_ENV=development. Default off. | off |
| ALGA_ALLOW_PRIVATE_INSTANCE | No | Exactly true allows private/loopback destinations and HTTP for stdio and AUTH_MODE=env sandboxes only. Default off. | off |
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 | {} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| alga_tickets_listB | List tickets, one page at a time. Use to browse or filter by client, board, status, priority, assignee, open or closed, dates or external link. |
| alga_tickets_getA | Get one ticket by ID. Use after a list or search to see full details. |
| alga_tickets_searchA | Search tickets by text and return up to limit matches (not paginated). Closed tickets are left out unless include_closed is true. Narrow with comma-separated client, status, priority or assignee IDs. |
| alga_tickets_comments_listA | List comments on a ticket. Internal notes are included for internal users; each comment's is_internal flag says which. Use limit (up to 200) and offset to read long threads in parts. |
| alga_tickets_time_entries_listB | Get the time logged on a ticket (not paginated). Users who can read every time sheet see all entries; others see their own entries plus a total for everyone else's. |
| alga_tickets_assets_listB | List all assets linked to a ticket (not paginated). |
| alga_tickets_get_by_external_linkA | Get the ticket linked to a record in another system, using that system's name and the record's ID there. |
| alga_clients_listA | List clients, one page at a time. Use to browse or filter by name search, type or inactive state. |
| alga_clients_getA | Get one client by ID. Use after a list or search to see full details. |
| alga_clients_locations_listA | List all locations belonging to a client (not paginated). |
| alga_clients_contacts_listA | List contacts belonging to one client, one page at a time. Use alga_contacts_list to browse across clients or alga_contacts_search to find a person by name or email. |
| alga_contacts_listA | List contacts, one page at a time. Use to browse or filter by client or inactive state; use alga_contacts_search to find a person by name or email. |
| alga_contacts_getA | Get one contact by ID. Use after a list or search to see full details. |
| alga_contacts_searchA | Search contacts by name, email or other columns and return up to limit matches (not paginated). Optionally limit to one client or include inactive contacts. |
| alga_time_entries_listA | List time entries, one page at a time. Use to browse or filter by user, work item, dates or billable state. |
| alga_time_entries_getA | Get one time entry by ID. Use after a list or search to see full details. |
| alga_time_sheets_listA | List time sheets, one page at a time. Use to browse or filter by user, period or approval state. |
| alga_projects_task_status_mappings_listA | List the task statuses a project uses, in the order Alga shows them, with the ID Alga uses for each (project_status_mapping_id). Pass phase_id to get the statuses for one phase; if that phase has no statuses of its own, you get the project's. |
| alga_projects_listA | List projects, one page at a time. Use to browse or filter by client, status or search. |
| alga_projects_getA | Get one project by ID. Use after a list or search to see full details. |
| alga_projects_phases_listB | List all phases in a project. This list is not paginated. |
| alga_projects_tasks_listA | List all tasks in a project. Pass phase_id to list only one phase; get phase IDs from alga_projects_phases_list. These lists are not paginated. |
| alga_projects_tasks_getA | Get one project task by ID. Use after a list or search to see full details. |
| alga_assets_listA | List assets, one page at a time. Use to browse or filter by client, type, status or location; use alga_assets_search to find assets by text. |
| alga_assets_getA | Get one asset by ID. Use after a list or search to see full details. |
| alga_assets_searchA | Search assets by text and return up to limit matches (not paginated). To filter by client, type or status, use alga_assets_list instead. |
| alga_invoices_listA | List invoices, one page at a time. Filter by client, status, invoice date range or due date range (YYYY-MM-DD, inclusive). |
| alga_invoices_getA | Get one invoice by ID. Use after a list or search to see full details. |
| alga_invoices_items_listA | List all line items on an invoice (not paginated). |
| alga_users_listB | List users, one page at a time. Use to browse or filter by search or inactive state. |
| alga_users_getA | Get one user profile by ID. Use after a list or search to see full details. |
| alga_teams_listA | List teams of users, one page at a time. Use to browse or filter by team name, manager or whether a team has a manager. |
| alga_boards_listA | List ticket boards, optionally filtered by name search, one page at a time. Inactive boards are left out unless include_inactive is true. |
| alga_statuses_listA | List statuses, one page at a time. Filter by type (ticket, project, project_task or interaction) or name search. Ticket statuses belong to a board, so type=ticket also needs board_id. |
| alga_priorities_listA | List priorities, one page at a time. Use to browse or filter by priority name search or by what they apply to (item_type). |
| alga_ticket_categories_listA | List ticket categories, one page at a time. Use to browse or filter by board, parent category or name search. |
| alga_services_listA | List services, one page at a time. Use to browse or filter by name search or category. |
| alga_contracts_listA | List client contracts, one page at a time (each has owner_client_id and owner_client_name); templates are not included. Filter by contract name, active state or whether a contract has plans. There is no per-client filter here. |
| alga_searchA | Search across record types at once. Use when you don't know the record type; pass the returned nextCursor as cursor to get more results. |
| alga_schedules_listB | List schedule entries, one page at a time. Filter by user or date range. |
| alga_kb_articles_listB | List knowledge articles, one page at a time. Use to browse or filter by search, category, type, audience or status. |
| alga_kb_articles_getA | Get one knowledge article by ID. Use after a list or search to see full details. |
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 42 tools
Most tools target clearly distinct resource/action pairs, and descriptions explicitly distinguish list vs search vs get and entity-scoped vs global listings. Minor overlap remains between alga_search and the per-entity search tools, and between nested list tools such as alga_clients_contacts_list and alga_contacts_list, but the descriptions make the intended use reasonably clear.
Tool names consistently use the alga_ prefix followed by snake_case resource and action names, including nested resources like alga_tickets_comments_list and alga_projects_tasks_get. The pattern is predictable throughout the set despite some longer names.
The server exposes 42 tools, which is well above the range where a tool set remains easy to navigate. While the PSA domain is broad, the surface is heavy and likely to overwhelm agents with many similar list/get/search variants.
The set provides extensive read coverage across tickets, clients, contacts, projects, invoices, assets, users, and reference data, but it appears to be read-only. There are no create, update, delete, or mutation tools for core PSA workflows such as creating tickets, adding comments, logging time, or updating invoice/client records, which are significant gaps for a PSA server.