upservice-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UPSERVICE_API_KEY | Yes | Your Upservice API key. Looks like UPS-XXXX-XXXX-XXXX-XXXX. | |
| UPSERVICE_API_BASE_URL | No | Optional custom base URL for the Upservice API. | https://public.upservice.io |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| upservice_list_employeesA | List employees in the Upservice account. Args: params (ListEmployeesInput): - limit (Optional[int]): Page size, 1-100 (default 25) - offset (Optional[int]): Items to skip for pagination (default 0) Returns: str: JSON array/object of employees as returned by the Upservice API (fields typically include id, first_name, last_name, email, position, department). Error Handling: Returns "Error: ..." with an actionable message on failure (see error codes below). |
| upservice_list_projectsA | List projects in the Upservice account. Args: params (ListProjectsInput): limit (1-100, default 25), offset (default 0), status, tags_condition, tags_ids Returns: str: JSON list of projects (id, title, managers, members, completed, etc.) |
| upservice_create_projectB | Create a new project in Upservice. Args: params (CreateProjectInput): - title (str): Project title - managers (List[int]): Employee IDs to assign as project managers - members (List[int]): Employee IDs to assign as project members - extra_fields (Optional[dict]): Extra raw JSON fields to merge into the body Returns: str: JSON of the created project record. |
| upservice_get_projectA | Retrieve a single project by ID. Args: params (ProjectIdInput): project_id (int) Returns: str: JSON of the project record, or "Error: Resource not found (404)" if it doesn't exist. |
| upservice_update_projectA | Update an existing project's fields (e.g. title). Args: params (UpdateProjectInput): project_id (int), title (optional str), extra_fields (optional dict) Returns: str: JSON of the updated project record. |
| upservice_delete_projectA | Permanently delete a project. This is a destructive operation and cannot be undone. Args: params (ProjectIdInput): project_id (int) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_set_project_managersA | Replace the full set of managers for a project. Note: this REPLACES the existing manager list, it does not append to it. Args: params (SetProjectEmployeesInput): project_id (int), employees (List[int], the new full manager list) Returns: str: JSON confirmation/updated manager list. |
| upservice_set_project_membersA | Replace the full set of members/guests for a project. Note: this REPLACES the existing membership list, it does not append to it. Args: params (SetProjectEmployeesInput): project_id (int), employees (List[int], the new full member list) Returns: str: JSON confirmation/updated member list. |
| upservice_complete_projectA | Mark a project as completed. Args: params (ProjectIdInput): project_id (int) Returns: str: JSON of the updated project record. |
| upservice_list_sprintsB | List sprints, optionally filtered by project. Args: params (ListSprintsInput): limit, offset, project (optional list of IDs), status (optional list), is_lag (optional bool) Returns: str: JSON list of sprints. |
| upservice_create_sprintA | Create a new sprint under a project. Args: params (CreateSprintInput): title, project (int), date_start (YYYY-MM-DD), date_end (YYYY-MM-DD), extra_fields (optional dict) Returns: str: JSON of the created sprint. |
| upservice_get_sprintB | Retrieve a single sprint by ID. Args: params (SprintIdInput): sprint_id (int) Returns: str: JSON of the sprint record. |
| upservice_update_sprintA | Update a sprint's title or dates. Args: params (UpdateSprintInput): sprint_id (int), title/date_start/date_end (all optional), extra_fields (optional dict) Returns: str: JSON of the updated sprint. |
| upservice_delete_sprintA | Permanently delete a sprint. This is a destructive operation. Args: params (SprintIdInput): sprint_id (int) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_complete_sprintB | Mark a sprint as completed. Args: params (SprintIdInput): sprint_id (int) Returns: str: JSON of the updated sprint. |
| upservice_activate_sprintB | Activate a sprint (start it). Args: params (SprintIdInput): sprint_id (int) Returns: str: JSON of the updated sprint. |
| upservice_add_tasks_to_sprintA | Add one or more existing tasks to a sprint. Args: params (AddTasksToSprintInput): sprint_id (int), tasks (List[int] of task IDs) Returns: str: JSON list of task IDs now in the sprint. |
| upservice_list_tagsA | List tags defined in the Upservice account, optionally filtered by a search query. Args: params (ListTagsInput): limit, offset, query (optional str) Returns: str: JSON list of tags (id, name, color, type). |
| upservice_create_tagB | Create a new tag definition. Args: params (CreateTagInput): name (str), color (optional str), type (optional: text|number|address|date|richard) Returns: str: JSON of the created tag, including its UUID. |
| upservice_update_tagB | Update an existing tag's name or color. Args: params (UpdateTagInput): tag_id (UUID str), name (optional), color (optional) Returns: str: JSON of the updated tag. |
| upservice_delete_tagA | Permanently delete a tag definition (removing it from all entities it was applied to). Args: params (UpdateTagInput): only tag_id is used (UUID str) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_assign_tagA | Assign (attach) a tag to an entity such as a task, chat, asset, contact, or attachment. Args: params (AssignTagInput): tag_id (UUID), entity_id (UUID or int), entity_type (enum) Returns: str: JSON confirmation of the assignment. |
| upservice_unassign_tagA | Remove (detach) a tag from an entity. Args: params (AssignTagInput): tag_id (UUID), entity_id (UUID or int), entity_type (enum) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_list_tasksA | List/search tasks with optional filters for kind, project, author, responsible, date ranges, and tags. CONFIRMED LIMITATION (verified against the live API, not just the OpenAPI spec): this
endpoint has no status/status_in/is_completed/completed/query filter. Passing any of
those as extra query params is silently ignored server-side (no error, no effect on
results) — status filtering must be done client-side on the returned Args: params (ListTasksInput): limit, offset, kind, project, author, responsible, created_at_gte/lte, completed_at_gte/lte, date_start_gte/lte, date_end_gte/lte, tags_ids, tags_condition (all optional except pagination defaults) Returns: str: JSON list of tasks matching the filters. |
| upservice_create_taskA | Create a new task (or meeting/agreement/ticket, depending on Args: params (CreateTaskInput): title, kind, description, project, sprint, responsible, responsible_departments, estimation (minutes), date_start, date_end, file_list, mentions, extra_fields Returns: str: JSON of the created task record, including its ID. Examples: - "Create a task 'Fix login bug' in project 42, due 2026-08-01" -> title="Fix login bug", project=42, date_end="2026-08-01T00:00:00Z" - "Create a task and mention Ivan (employee_id 115768) in the description" -> description="cc {{115768}}", mentions=[{"employee_id": 115768, "display_name": "Ivan Ivanov"}] |
| upservice_get_taskA | Retrieve full details for a single task by ID. Args: params (TaskIdInput): task_id (int) Returns: str: JSON of the task record. |
| upservice_update_taskA | Partially update a task's fields (title, description, dates, responsible, etc). Only fields you provide are changed; omitted fields are left unchanged. Args: params (UpdateTaskInput): task_id (int) plus any fields to change, mentions (for description), and extra_fields for anything not explicitly modeled Returns: str: JSON of the updated task record. |
| upservice_delete_taskA | Permanently delete a task. This is a destructive operation and cannot be undone. Args: params (TaskIdInput): task_id (int) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_get_task_attachmentsA | List file attachments on a task. Args: params (TaskIdInput): task_id (int) Returns: str: JSON list of attachments (id, filename, url, etc. - use upservice_get_file_url for a fresh download link). |
| upservice_update_task_statusA | Change a task's status (e.g. mark as completed, cancelled, in progress). Args: params (UpdateTaskStatusInput): task_id (int), status (enum), reason (optional str, needed for cancel/reject) Returns: str: JSON of the updated task. |
| upservice_update_task_estimationA | Set the planned-effort estimate for a task, in minutes. Args: params (UpdateTaskEstimationInput): task_id (int), estimation (int, minutes) Returns: str: JSON of the updated task. |
| upservice_update_task_worklogA | Log actual effort (worklog) spent on a task, in minutes. Args: params (UpdateTaskWorklogInput): task_id (int), value (int, minutes of actual effort) Returns: str: JSON of the updated task/worklog. |
| upservice_task_agreement_actionA | Advance an agreement/approval workflow step on a task: progress it, approve it, or reject it. Args: params (AgreementActionInput): task_id (int), action (progress|approved|rejected), rejection_reason (required if action='rejected'), date_end (optional, used with 'progress') Returns: str: JSON of the updated agreement state. |
| upservice_get_agreement_stepsB | List the approval/agreement steps and their statuses for a task. Args: params (TaskIdInput): task_id (int) Returns: str: JSON list of agreement steps. |
| upservice_get_task_co_responsiblesA | List the co-responsible employees assigned to a task. Args: params (TaskIdInput): task_id (int) Returns: str: JSON list of co-responsible employees. |
| upservice_get_agreement_sheetA | Get the agreement sheet (approval status and attachments) for a task. Args: params (TaskIdInput): task_id (int) Returns: str: JSON with status and attachments for the agreement. |
| upservice_get_acquaintance_sheetA | Get the acquaintance sheet (who has read/acknowledged) for a task of kind 'acquaintance'. Args: params (TaskIdInput): task_id (int) Returns: str: JSON with acknowledgement status per employee. |
| upservice_list_directoriesA | List custom directories (reference catalogs, e.g. assets, contacts) defined in the account. Note: this endpoint has no pagination in the Upservice API; it returns all matching directories. Args: params (ListDirectoriesInput): parent, search, id, manager (all optional) Returns: str: JSON list of directories. |
| upservice_create_directoryB | Create a new custom directory (reference catalog). Args: params (CreateDirectoryInput): title, manager_id (int), parent_id (optional int) Returns: str: JSON of the created directory. |
| upservice_get_directoryA | Retrieve a single directory by ID. Args: params (DirectoryIdInput): directory_id (int) Returns: str: JSON of the directory record. |
| upservice_update_directoryA | Update a directory's title or manager. Args: params (UpdateDirectoryInput): directory_id (int), title (optional), manager_id (optional) Returns: str: JSON of the updated directory. |
| upservice_delete_directoryA | Permanently delete a directory (and, depending on account settings, its records). Destructive operation. Args: params (DirectoryIdInput): directory_id (int) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_list_directory_recordsA | List records within directories, optionally filtered to one or more directories. Args: params (ListDirectoryRecordsInput): limit, offset, category, responsible, creator, search, id, tags_ids, tags_condition, date_end_gte/lte, is_subscribed (all optional) Returns: str: JSON list of directory records. |
| upservice_create_directory_recordA | Create a new record within a directory (e.g. an asset or contact entry). Args: params (CreateDirectoryRecordInput): title, category (directory ID), responsible (employee ID), description (optional), inventory_number (optional), extra_fields (optional dict) Returns: str: JSON of the created record. |
| upservice_get_directory_recordB | Retrieve a single directory record by ID. Args: params (RecordIdInput): record_id (int) Returns: str: JSON of the record. |
| upservice_update_directory_recordA | Partially update a directory record's fields. Only fields you explicitly pass are sent — an omitted field is left unchanged, while an
explicit Args: params (UpdateDirectoryRecordInput): record_id (int) plus any fields to change, extra_fields for the rest Returns: str: JSON of the updated record. |
| upservice_delete_directory_recordA | Permanently delete a directory record. Destructive operation. Args: params (RecordIdInput): record_id (int) Returns: str: JSON confirmation, or "Error: ..." on failure. |
| upservice_list_directory_record_relationsA | List the entities (tasks, orders, projects, etc.) linked/related to a directory record. Args: params (RecordIdInput): record_id (int) Returns: str: JSON list of related entities, grouped by relation type. |
| upservice_bulk_update_directory_relationsA | Add or remove multiple links between a directory record and other entities (tasks, projects, orders, etc.) in one call. Args: params (BulkUpdateRelationsInput): record_id (int), relations (list of {rel_type, relation_ids, is_delete}) Returns: str: JSON confirmation of the applied relation changes. |
| upservice_list_chat_messagesB | Load messages from one or more Upservice chat rooms. Args: params (ListChatMessagesInput): chat_uuids (required list), channel_id (required), limit, offset, thread_ids, language, sender_id, message_kind (all optional) Returns: str: JSON list of messages. |
| upservice_get_chat_messagesB | Get messages for a specific chat room within a specific channel. Args: params (GetChatMessagesInput): channel_unique_identifier (str), room_uuid (str), limit, offset Returns: str: JSON list of messages in that room. |
| upservice_create_external_messageB | Create a new external/inbound message (e.g. from an external channel integration). Args: params (SendMessageInput): content (str), message_id (optional UUID str), mentions (optional) Returns: str: JSON of the created message. |
| upservice_send_channel_messageA | Create a new message directly in a channel (not tied to a specific chat room). Args: params (SendChannelMessageInput): channel_unique_identifier (str), content (str), message_id, first_name, last_name, email, phone, mentions (all optional), extra_fields (optional dict) Returns: str: JSON of the created message. |
| upservice_send_chat_messageB | Send a message into a specific chat room within a channel. Args: params (SendChatMessageInput): channel_id (str), room_uuid (str), content (str), message_id (optional), mentions (optional) Returns: str: JSON of the sent message. |
| upservice_get_file_urlB | Get a fresh, time-limited download URL for a file/attachment. Args: params (FileIdInput): file_id (str) Returns: str: JSON containing the file's download URL. |
| upservice_upload_fileA | Upload a local file to Upservice (e.g. to attach it to a task via its returned file ID). Args: params (UploadFileInput): file_path (absolute local path) Returns: str: JSON of the uploaded file record, including its ID. |
| upservice_upload_file_to_channelB | Upload a local file to an external channel in Upservice. Args: params (UploadFileToChannelInput): channel_unique_identifier (str), file_path (absolute local path) Returns: str: JSON of the uploaded file record, including its ID. |
| upservice_get_channel_file_urlA | Get a fresh, time-limited download URL for a file/attachment scoped to an external channel. Args: params (ChannelFileIdInput): channel_unique_identifier (str), file_id (str) Returns: str: JSON containing the file's download URL. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/alexherbaly/upservice-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server