Skip to main content
Glama
tallpizza

Dooray MCP Server

by tallpizza

dooray_workflows

Manage Dooray project workflows by listing, viewing details, creating, updating, or deleting workflows to organize and automate project processes.

Instructions

Manage Dooray workflows - list project workflows, get workflow details, create, update, delete workflows

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform on workflows
workflowIdNoWorkflow ID (required for get/update/delete)
nameNoWorkflow name (for create/update)
projectIdNoProject ID (optional - uses default from environment if not provided)

Implementation Reference

  • The WorkflowsTool class provides the main handler for the 'dooray_workflows' tool, dispatching to specific workflow actions (list, get, create, update, delete) based on input arguments.
    class WorkflowsTool:
        """Handle Dooray workflow operations."""
        
        def __init__(self, client: DoorayClient):
            self.client = client
        
        async def handle(self, args: Dict[str, Any]) -> Dict[str, Any]:
            """Handle workflow tool calls."""
            action = args.get("action")
            
            if action == "list":
                return await list_workflows(
                    self.client, 
                    args.get("projectId")
                )
            elif action == "get":
                return await get_workflow_details(
                    self.client,
                    args["workflowId"],
                    args.get("projectId")
                )
            elif action == "create":
                return await create_workflow(
                    self.client,
                    args["name"],
                    args.get("projectId")
                )
            elif action == "update":
                return await update_workflow(
                    self.client,
                    args["workflowId"],
                    args["name"],
                    args.get("projectId")
                )
            elif action == "delete":
                return await delete_workflow(
                    self.client,
                    args["workflowId"],
                    args.get("projectId")
                )
            else:
                raise ValueError(f"Unknown action: {action}")
  • Input schema definition for the 'dooray_workflows' tool, specifying actions and required parameters.
    types.Tool(
        name="dooray_workflows",
        description="Manage Dooray workflows - list project workflows, get workflow details, create, update, delete workflows",
        inputSchema={
            "type": "object",
            "properties": {
                "action": {
                    "type": "string",
                    "enum": ["list", "get", "create", "update", "delete"],
                    "description": "Action to perform on workflows"
                },
                "workflowId": {
                    "type": "string",
                    "description": "Workflow ID (required for get/update/delete)"
                },
                "name": {
                    "type": "string",
                    "description": "Workflow name (for create/update)"
                },
                "projectId": {
                    "type": "string",
                    "description": "Project ID (optional - uses default from environment if not provided)"
                }
            },
            "required": ["action"]
        }
    )
  • Tool registration and invocation in the main handle_call_tool function, instantiating WorkflowsTool and calling its handle method.
    elif name == "dooray_workflows":
        tool = WorkflowsTool(dooray_client)
        result = await tool.handle(args)
  • Helper function to list workflows for a project via Dooray API.
    async def list_workflows(client: DoorayClient, project_id: Optional[str] = None) -> Dict[str, Any]:
        """
        List all workflows for a project
        
        Args:
            client: DoorayClient instance
            project_id: Project ID (optional - uses default from environment if not provided)
            
        Returns:
            Dictionary containing workflow list response
        """
        # Use default project ID if not provided
        if not project_id:
            project_id = client.project_id
            
        if not project_id:
            raise ValueError("Project ID must be provided either as parameter or environment variable")
        
        endpoint = f"/project/v1/projects/{project_id}/workflows"
        return await client.get(endpoint)
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions create/update/delete operations implying mutations, but doesn't specify permissions needed, whether deletions are permanent, rate limits, or what happens to associated data. For a multi-action tool with destructive operations, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured as a single sentence listing all actions. It's appropriately sized for a multi-action tool, though could be more front-loaded by emphasizing the primary purpose before listing actions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, multiple actions including destructive operations, no annotations, and no output schema, the description is incomplete. It should address behavioral aspects like permissions, side effects, and response formats given the complexity and lack of structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 4 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain relationships between action and other parameters or provide usage examples. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool manages Dooray workflows with specific verbs (list, get, create, update, delete) and identifies the resource (workflows). It distinguishes from siblings like dooray_comments or dooray_tasks by focusing on workflows, but doesn't explicitly differentiate within the workflow management domain since there are no sibling workflow tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like dooray_tasks or dooray_search. It lists actions but offers no context about prerequisites, when to choose create vs update, or how this tool fits into broader workflow management scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

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/tallpizza/dooray-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server