Installation
- Go to Apps in your workspace
- Search for Gryzzly and install it
- Open the app instance configuration and fill in the required fields
Configuration
| Field | Description |
|---|
| Gryzzly API Base URL | Base URL of the Gryzzly API (default https://api.gryzzly.io/v1) |
| API Key | Gryzzly API key, stored as a workspace secret. Passed as Authorization: Bearer <token> |
| MCP Endpoint | Auto-populated on install — URL of the MCP endpoint for this instance |
| MCP API Key | Auto-populated on install — signed key used in the mcp-api-key header. Do not modify |
MCP Endpoint and MCP API Key are generated automatically by the onInstall flow and are only needed to expose this instance as an MCP server (see the next tab).
Available Instructions
Every instruction resolves credentials from the workspace configuration. All IDs are UUIDs returned by Gryzzly. Most list operations accept limit (max 1000) and offset for pagination.Customers
| Instruction | Arguments |
|---|
listCustomers | customer_ids, manager_ids, is_active, limit, offset |
getCustomer | id |
createCustomer | name*, managers |
updateCustomer | id, name, is_active, managers |
deleteCustomer | id* |
Projects
| Instruction | Arguments |
|---|
listProjects | status (active/done/archived), limit, offset |
getProject | id |
createProject | name, start_at*, end_at, code, customer_id, visibility (public/private), is_billable, managers, contributors, groups, tags |
updateProject | id, name, start_at*, end_at, code, customer_id, status, visibility, is_billable, managers, contributors, groups, tags |
deleteProject | id* |
getProjectMetrics | project_id |
listProjectsMetrics | project_ids* |
exportProjects | from, to, project_ids, type (csv/xlsx) |
Tasks
| Instruction | Arguments |
|---|
listTasks | project_ids, task_ids, limit, offset |
getTask | id* |
createTask | name, project_id, start_at*, end_at, parent_id, is_container, budget_type (none/detailed/global/time), budget_amount, planned_duration, estimated_duration, hourly_rate, hourly_rate_mode (task/group/contributor), groups, tags |
updateTask | id*, name, start_at, end_at, completed_at, budget_amount, planned_duration, hourly_rate, hourly_rate_mode, groups, tags |
deleteTask | id* |
Declarations (Time Entries)
| Instruction | Arguments |
|---|
listDeclarations | task_ids, user_ids, from, to, limit, offset |
createDeclaration | date, duration (seconds), task_id, user_id, description |
updateDeclaration | id, date, duration, task_id, description |
deleteDeclaration | id* |
exportTimesAndLeaves | from, to, type (0/1) |
Leave Periods
| Instruction | Arguments |
|---|
listLeavesPeriods | user_ids, from, to, limit, offset |
getLeavesPeriod | id* |
createLeavesPeriod | user_id, start_at, end_at, start_type (full/am/pm), end_type, description, delete_declaration |
updateLeavesPeriod | id, start_at, end_at, start_type, end_type, description, delete_declaration |
deleteLeavesPeriod | id |
Discounts
| Instruction | Arguments |
|---|
listDiscounts | project_ids, task_ids, limit, offset |
getDiscount | id* |
createDiscount | name*, amount, project_id or task_id |
updateDiscount | id, name, amount |
deleteDiscount | id* |
Purchases
| Instruction | Arguments |
|---|
listPurchases | project_ids, task_ids, limit, offset |
getPurchase | id* |
createPurchase | name, project_id or task_id, billed_at, billed_price, paid_at, paid_price, billing_policy (add/ignore) |
updatePurchase | id*, name, billed_at, billed_price, paid_at, paid_price, billing_policy |
deletePurchase | id* |
Users
| Instruction | Arguments |
|---|
listUsers | limit, offset |
getUser | id* |
inviteUser | email, role (contributor/collaborator/manager/director/admin), group_ids |
Groups & Groupsets
| Instruction | Arguments |
|---|
listGroups | group_ids, groupset_ids, limit, offset |
getGroup | id* |
listGroupsets | groupset_ids, limit, offset |
getGroupset | id |
| Instruction | Arguments |
|---|
listTags | tag_ids, tagset_ids, limit, offset |
getTag | id* |
listTagsets | tagset_ids, limit, offset |
getTagset | id |
Arguments flagged with * are required.
DSUL Examples
Log a Time Declaration
- Gryzzly.createDeclaration:
user_id: '{{user_id}}'
task_id: '{{task_id}}'
date: '{{run.date}}'
duration: 7200
description: Implementation review
output: declaration
Create a Project With a Task
- Gryzzly.createProject:
name: Website Revamp
start_at: 2026-01-06
customer_id: '{{customer_id}}'
visibility: private
is_billable: true
managers:
- '{{manager_user_id}}'
output: project
- Gryzzly.createTask:
project_id: '{{project.id}}'
name: Design System
start_at: 2026-01-06
budget_type: time
planned_duration: 80
output: task
Export Time and Leaves for Payroll
- Gryzzly.exportTimesAndLeaves:
from: 2026-03-01
to: 2026-03-31
type: 1
output: export
Invite a Contributor
- Gryzzly.inviteUser:
email: new.hire@example.com
role: contributor
group_ids:
- '{{group_id}}'
output: invitation
The Gryzzly app ships with a built-in MCP server. Each app instance gets its own signed mcp-api-key that encodes the workspace ID and a credentials lookup URL — the Gryzzly API key itself is never passed through headers and is resolved server-side from the app configuration.Plug into an Agent Creator capability
Agents consume MCP servers directly through Agent Creator capabilities. This is the preferred way to expose Gryzzly to an agent.Create or open a workspace
From the Prisme.ai console, create a new workspace (or open the one that will host the connector).
Install the Gryzzly app
Open the workspace Imports panel, search for Gryzzly and install it.
Configure the credentials
Open the freshly installed app instance settings and fill in the required fields (see the Usage as App tab for the field-by-field reference).
Copy the MCP endpoint and API key
Still on the app instance configuration page, copy the values of MCP Endpoint and MCP API Key — both are generated automatically on install.
Open Agent Creator
Switch to Agent Creator and open the agent you want to extend.
Add a capability
Add a new capability to the agent:
-
If a dedicated Gryzzly capability exists — select it and paste the MCP API Key into the
mcp-api-key field. The server URL is already wired.
-
Otherwise — select the generic
custom_mcp capability, paste the MCP Endpoint into the Server URL field, then open the Headers field and add an mcp-api-key entry whose value is the MCP API Key copied earlier:
{
"mcp-api-key": "your-mcp-api-key"
}
Save
The agent now has access to every Gryzzly tool exposed by the MCP server.
Brief the agent in its system prompt
Wiring the capability is not enough — the agent also needs to know the MCP exists and when to reach for it. Add a short paragraph to the agent’s system prompt. Copy-pasteable starter:You have access to the Gryzzly MCP server. Use it whenever the user asks about time-tracking data — customers, projects, tasks, declarations, leave periods or payroll exports. Examples: "How many hours did I declare last week?", "Create a new project under customer Acme", "List my pending leave requests", "Export this month's declarations as CSV". Prefer calling MCP tools directly over guessing, and confirm with the user before any destructive action (delete a project, remove a declaration, cancel a leave period).
Refine the trigger keywords (customer names, project codes, internal task labels) so the agent reliably picks up the right intent in your context. Use this flow to plug the Gryzzly MCP into an Knowledges agent that does not yet support the native MCP picker.Install the Gryzzly app
Install and configure the app in the same workspace as your agent (see the Usage as App tab). Once configured, mcpEndpoint and mcpApiKey are auto-populated.
Copy the MCP credentials
Open the app instance config and copy the values of MCP Endpoint and MCP API Key.
Open your Knowledges project
Navigate to Advanced > Tools.
Add an MCP tool
Click Add and select the MCP tab.
Fill in the endpoint
Paste the MCP Endpoint URL copied from the app instance.
Add the auth header
In the Headers field, add the signed API key:{
"mcp-api-key": "your-mcp-api-key"
}
Save
The agent can now list and call Gryzzly tools through the MCP endpoint.
The signed mcp-api-key encodes the workspace ID and the getConfig webhook URL. The MCP server validates the signature using the central app secret and transparently fetches the Gryzzly API key and base URL from the installed app. Credentials are cached per tenant for 10 minutes.
Every tool accepts an outputFormat parameter that controls the MCP response shape:
verbose (default) — human-readable text for LLM consumption
structured — machine-readable JSON in structuredContent
both — both text and structured content
Customers
| Tool | Description |
|---|
listCustomers | List customers |
getCustomer | Get a customer |
createCustomer | Create a customer |
updateCustomer | Update a customer |
deleteCustomer | Delete a customer |
Projects
| Tool | Description |
|---|
listProjects | List projects (filter by status: active/done/archived) |
getProject | Get a project |
createProject | Create a project |
updateProject | Update a project |
deleteProject | Delete a project |
getProjectMetrics | Get project’s metrics |
listProjectsMetrics | List projects metrics |
exportProjects | Get projects export file (csv/xlsx) |
Tasks
| Tool | Description |
|---|
listTasks | List tasks |
getTask | Get a task |
createTask | Create a task |
updateTask | Update a task |
deleteTask | Delete a task |
Declarations
| Tool | Description |
|---|
listDeclarations | List declarations (requires task_ids and user_ids) |
createDeclaration | Create a declaration |
updateDeclaration | Update a declaration |
deleteDeclaration | Delete a declaration |
exportTimesAndLeaves | Get declaration and leaves export file |
Leave Periods
| Tool | Description |
|---|
listLeavesPeriods | List leaves periods |
getLeavesPeriod | Get a leave period |
createLeavesPeriod | Create a leave period |
updateLeavesPeriod | Update a leave period |
deleteLeavesPeriod | Delete a leave period |
Discounts & Purchases
| Tool | Description |
|---|
listDiscounts / getDiscount / createDiscount / updateDiscount / deleteDiscount | Manage project/task discounts |
listPurchases / getPurchase / createPurchase / updatePurchase / deletePurchase | Manage project/task purchases |
| Tool | Description |
|---|
listUsers / getUser / inviteUser | List, fetch and invite users |
listGroups / getGroup / listGroupsets / getGroupset | Browse user groups and groupsets |
listTags / getTag / listTagsets / getTagset | Browse tags and tagsets |
createDeclaration
Log a time entry on a task for a specific user.{
"name": "createDeclaration",
"arguments": {
"user_id": "user-uuid",
"task_id": "task-uuid",
"date": "2026-04-20",
"duration": 7200,
"description": "Implementation review"
}
}
| Parameter | Required | Description |
|---|
date | Yes | Declaration date (YYYY-MM-DD) |
duration | Yes | Duration in seconds |
task_id | Yes | UUID of the task |
user_id | Yes | UUID of the user |
description | No | Free-form text, max 256 chars |
createProject
{
"name": "createProject",
"arguments": {
"name": "Website Revamp",
"start_at": "2026-01-06",
"customer_id": "customer-uuid",
"visibility": "private",
"is_billable": true,
"managers": ["manager-uuid"]
}
}
Accepts code, end_at, contributors, groups, tags. visibility is one of public / private — contributors must be empty when visibility="public".createTask
{
"name": "createTask",
"arguments": {
"project_id": "project-uuid",
"name": "Design System",
"start_at": "2026-01-06",
"budget_type": "time",
"planned_duration": 80
}
}
budget_type ∈ none/detailed/global/time. hourly_rate_mode ∈ task/group/contributor. Supports parent_id for sub-tasks and is_container for parent tasks.createLeavesPeriod
{
"name": "createLeavesPeriod",
"arguments": {
"user_id": "user-uuid",
"start_at": "2026-05-10",
"end_at": "2026-05-14",
"start_type": "full",
"end_type": "full",
"description": "Vacation"
}
}
start_type / end_type ∈ full / am / pm. Use delete_declaration: true to remove existing declarations in that range.inviteUser
{
"name": "inviteUser",
"arguments": {
"email": "new.hire@example.com",
"role": "contributor",
"group_ids": ["group-uuid"]
}
}
role ∈ contributor / collaborator / manager / director / admin.exportTimesAndLeaves / exportProjects
Generate payroll-grade exports over a date range.{
"name": "exportTimesAndLeaves",
"arguments": {
"from": "2026-03-01",
"to": "2026-03-31",
"type": 1
}
}
exportProjects accepts type ∈ csv / xlsx and an optional project_ids filter.