Overview

MCP resources are URI-addressable, read-only data endpoints. Unlike tools (which perform actions), resources let the AI assistant load structured context before deciding what to do next.

ProBeya exposes both static resources (fixed URIs, always available) and resource templates (parameterized URIs for dynamic data). Resource templates include list callbacks so the AI can auto-discover available boards and projects.

All resource handlers delegate to tRPC procedures via appRouter.createCaller(), reusing the same business logic and tenant isolation as the web app.


Static Resources

probeya://dashboard

Organization-level statistics combining multiple dashboard queries into a single comprehensive snapshot.

PropertyValue
URIprobeya://dashboard
MIME Typeapplication/json
AuthenticationRequired (any valid API key)

Response structure:

{
  "stats": {
    "totalItems": 142,
    "totalProjects": 8,
    "totalMembers": 23,
    "completionRate": 64.7
  },
  "statusDist": [
    { "status": "Working on it", "count": 45 },
    { "status": "Done", "count": 92 },
    { "status": "Stuck", "count": 5 }
  ],
  "priorityBreakdown": [
    { "priority": "Critical", "count": 3 },
    { "priority": "High", "count": 18 },
    { "priority": "Medium", "count": 67 },
    { "priority": "Low", "count": 54 }
  ]
}

When to use: Start here for a high-level understanding of the organization’s state before drilling into specific projects or boards.


probeya://members

All organization members with roles, IDs, and emails.

PropertyValue
URIprobeya://members
MIME Typeapplication/json
AuthenticationRequired (any valid API key)

Response structure:

[
  {
    "id": "usr_abc123",
    "name": "Jane Smith",
    "email": "[email protected]",
    "role": "admin"
  },
  {
    "id": "usr_def456",
    "name": "Bob Wilson",
    "email": "[email protected]",
    "role": "member"
  }
]

When to use: Load this resource to find user IDs before assigning items or actions, or to understand team composition.


Resource Templates

Resource templates use parameterized URIs. The AI assistant substitutes the parameter to access specific data. Both templates include list callbacks that enumerate all available instances.

probeya://board/

Full board data including groups (columns/swimlanes), column definitions, items (tasks), and their cell values. This is the complete Kanban board snapshot.

PropertyValue
URI Patternprobeya://board/{boardId}
MIME Typeapplication/json
ParameterboardId — the board’s cuid2 identifier
Discoverylist callback enumerates all boards across all workspaces and projects

Response structure:

{
  "id": "brd_xyz789",
  "name": "Production Line Alpha",
  "groups": [
    { "id": "grp_001", "name": "To Do", "color": "#579bfc" },
    { "id": "grp_002", "name": "In Progress", "color": "#fdab3d" },
    { "id": "grp_003", "name": "Done", "color": "#00c875" }
  ],
  "columns": [
    { "id": "col_001", "name": "Status", "type": "status" },
    { "id": "col_002", "name": "Priority", "type": "priority" },
    { "id": "col_003", "name": "Due Date", "type": "date" },
    { "id": "col_004", "name": "Assignee", "type": "person" }
  ],
  "items": [
    {
      "id": "itm_aaa",
      "name": "Calibrate sensor array",
      "groupId": "grp_002",
      "values": { ... }
    }
  ]
}

When to use: Load this to understand a project’s current state — what tasks exist, where they are in the workflow, and what columns are available for setting values.

Discovery: The list callback walks the full workspace > project hierarchy and returns all boards with item counts and group counts:

{
  "resources": [
    {
      "uri": "probeya://board/brd_xyz789",
      "name": "Brussels Site / Production Line Alpha",
      "description": "Board with 42 items, 3 groups",
      "mimeType": "application/json"
    }
  ]
}

probeya://project/

Project overview with a board summary — item count, group breakdown, and column definitions. Lighter than the full board resource (no individual item data).

PropertyValue
URI Patternprobeya://project/{projectId}
MIME Typeapplication/json
ParameterprojectId — the project’s cuid2 identifier
Discoverylist callback enumerates all projects across all workspaces

Response structure:

{
  "boardId": "brd_xyz789",
  "boardName": "Production Line Alpha",
  "totalGroups": 3,
  "totalColumns": 8,
  "totalItems": 42,
  "groups": [
    { "id": "grp_001", "name": "To Do", "itemCount": 12 },
    { "id": "grp_002", "name": "In Progress", "itemCount": 18 },
    { "id": "grp_003", "name": "Done", "itemCount": 12 }
  ],
  "columns": [
    { "id": "col_001", "name": "Status", "type": "status" },
    { "id": "col_002", "name": "Priority", "type": "priority" }
  ]
}

When to use: Get a quick overview of a project without loading all item data. Useful for deciding which project to drill into, or for summary reporting across multiple projects.

Discovery: The list callback returns all projects with workspace context:

{
  "resources": [
    {
      "uri": "probeya://project/prj_abc123",
      "name": "Brussels Site / Quality Improvement",
      "description": "Pharma quality transformation project",
      "mimeType": "application/json"
    }
  ]
}

Several tools return resource link content blocks that cross-reference related resources. For example:

  • get_board includes a link to probeya://board/{boardId}
  • create_item includes a link to view the parent board
  • analyze_board includes a link to the analyzed board

These links allow the AI client to follow references and load additional context without the user needing to specify IDs manually.

{
  "type": "resource_link",
  "uri": "probeya://board/brd_xyz789",
  "name": "Production Line Alpha",
  "description": "Board with 42 items",
  "mimeType": "application/json"
}