npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@taazkareem/clickup-mcp-server

v0.14.4

Published

ClickUp MCP Server - Powering AI Agents with full ClickUp task, document, and chat management capabilities.

Readme


Properly Connect ClickUp to AI Agents and Agentic Workflows

A high-performance Model Context Protocol (MCP) server for managing tasks, checklists, sprints, comments, tags, spaces, lists, folders, files, docs, chat, and time using natural language.

⭐️ Proven Performance: 460+ Stars (from previous public repo) & thousands of weekly NPM downloads.
The industry-standard ClickUp integration for AI.


📚 Table of Contents

| Links         | Quick Start & Installation | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | • Features• Premium Access• Available Tools• Adv. Config• FAQ• Disclaimer | OpenClaw Cursor VS Code Roo Code Claude Claude Code n8n Gemini CLI Antigravity Codex ChatGPT Augment Auggie Windsurf Other ➕ Add Agent |


✨ Features

🔥 Multi-Account Support: Manage multiple authorized workspaces seamlessly in a single session. See setup


💎 Premium Access

This project transitioned from open-source to a paid model for sustainable full-time development and priority support. A license grants full, unrestricted access to all features across your agents⎯no limits.

| Monthly $9/mo | Annual $59/yr | Lifetime $119 | | :--------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | • Pay-as-you-go flexibility• 3 device activations• Cancel anytime | • Save 45% ($4.92/mo)• 3 device activations• Priority support all year | • Best Value — One payment• 3 device activationsUnlocked Forever |

⚡️ Instant Key Delivery (Polar.sh)   •   Setup takes less than 2 mins      


🚀 Quick Start

1. Prerequisites

  • License Key: See above

  • ClickUp API Key (Optional - not needed for Remote MCP)

  • ClickUp Team ID (Optional - not needed for Remote MCP)

    • Open ClickUp in your browser.
    • Look at the URL: https://app.clickup.com/1234567/v/li/987654321.
    • The first number (1234567) directly after clickup.com/ is your Team ID (Workspace ID).

2. Choose your MCP Host & Transport

1. Enable mcporter in ~/.openclaw/openclaw.json:

{ "skills": { "allowBundled": ["mcporter"] } }

2. Configure & Auth Connect the server and authorize via browser (tokens are cached):

# Add ClickUp as a remote server
mcporter config add ClickUp https://clickup-mcp.taazkareem.com/mcp --auth oauth --header "X-License-Key=your-license-key"

# Authenticate session
mcporter auth ClickUp

Optional: Multiple Personas The most robust and flexible way to manage personas is to define multiple named configurations in your agent-specific mcporter.json file. This isolates credentials and policies per-agent.

# Define an Auditor persona (Read-only) in your workspace config
mcporter --config <agent-workspace>/config/mcporter.json config add ClickUp-Auditor https://clickup-mcp.taazkareem.com/mcp \
  --header "X-Persona=auditor" \
  --header "X-License-Key=your-license-key" \
  --header "X-ClickUp-Key=your-api-key" \
  --header "X-ClickUp-Team-Id=your-team-id"

# Define a Task Worker persona (Daily CRUD) in the same or different workspace
mcporter --config <agent-workspace-2>/config/mcporter.json config add ClickUp-Worker https://clickup-mcp.taazkareem.com/mcp \
  --header "X-Persona=task_worker" \
  --header "X-License-Key=your-license-key" \
  --header "X-ClickUp-Key=your-api-key" \
  --header "X-ClickUp-Team-Id=your-team-id"

# Now the OpenClaw sub-agent can see the optimized schema and call its focused tools like:
mcporter list ClickUp-Auditor --schema
mcporter call ClickUp-Auditor.get_workspace

mcporter list ClickUp-Worker --schema
mcporter call ClickUp-Worker.create_task listId="123456789" name="New Task"

Isolation: You can add X-Enabled-Tools or X-Disabled-Tools to mix and match tools and personas, or perhaps enable just a single tool. You can assign different ClickUp API Keys, Team IDs, or even different License Keys to each config/persona. Since the agent only reads the tool definitions and not the sensitive headers directly, this is the most secure way to handle multi-agent ClickUp configurations.

To see all available personas and what they do, see the Advanced Configuration section below.

Configuration Path: <project-root>/.cursor/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": ["-y", "@taazkareem/clickup-mcp-server@latest"],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "CLICKUP_MCP_LICENSE_KEY": "your-license-key"
      }
    }
  }
}

Configuration Paths:

  • Global: ~/Library/Application Support/Code/User/mcp.json
  • Local: <project-root>/.vscode/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": ["-y", "@taazkareem/clickup-mcp-server@latest"],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "CLICKUP_MCP_LICENSE_KEY": "your-license-key"
      }
    }
  }
}

Configuration Path: <project-root>/.roo/mcp.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": ["-y", "@taazkareem/clickup-mcp-server@latest"],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "CLICKUP_MCP_LICENSE_KEY": "your-license-key"
      }
    }
  }
}

Configuration Path: ~/Library/Application Support/Claude/claude_desktop_config.json

Remote Setup (Requires mcp-remote adapter):

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://clickup-mcp.taazkareem.com/mcp",
        "--header",
        "X-License-Key: your-license-key"
      ]
    }
  }
}

Run this command in your terminal:

claude mcp add --transport http ClickUp https://clickup-mcp.taazkareem.com/mcp \
  --header "X-License-Key: your-license-key"

Option A: Remote / Streamable HTTP (Recommended)

  1. In n8n, add an "MCP Client" node.
  2. Set Connection Type to Streamable HTTP.
  3. Auth Type: Multiple Headers Auth.
  4. Header: X-License-Key Value: your-license-key
  5. URL: https://clickup-mcp.taazkareem.com/mcp

Option B: Self-Hosted Docker Run the container:

docker run -d -p 3231:3231 ghcr.io/taazkareem/clickup-mcp-server:latest

In n8n, use URL: http://host.docker.internal:3231/mcp

Configuration Path: ~/.gemini/settings.json

{
  "mcpServers": {
    "ClickUp": {
      "httpUrl": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": { "X-License-Key": "your-license-key" }
    }
  }
}

Configuration Path: ~/.gemini/antigravity/mcp_config.json

{
  "mcpServers": {
    "ClickUp": {
      "serverUrl": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": { "X-License-Key": "your-license-key" }
    }
  }
}

Codex clients (CLI, Desktop App, and VS Code extension) share a single source of truth for configuration.

Configuration Paths:

  • Global: ~/.codex/config.toml
  • Local: <project-root>/.codex/config.toml

Option A: Remote / Streamable HTTP (Easiest)

[mcp_servers.ClickUp]
url = "https://clickup-mcp.taazkareem.com/mcp"
http_headers = { "X-License-Key" = "your-license-key" }

Option B: Local / STDIO

[mcp_servers.ClickUp]
command = "npx"
args = ["-y", "@taazkareem/clickup-mcp-server@latest"]
env = {
  CLICKUP_API_KEY = "your-api-key",
  CLICKUP_TEAM_ID = "your-team-id",
  CLICKUP_MCP_LICENSE_KEY = "your-license-key"
}

Quick Tips:

  • Codex CLI: Run codex mcp list to verify. Use codex mcp add ... as a CLI alternative to editing the file.
  • VS Code Extension: Click ⚙ → MCP settings → Open config.toml.
  • Desktop App: Go to Settings → Integrations & MCP.

Note: Requires a Business, Enterprise, or Edu workspace with Developer Mode enabled.

  1. Enable Developer Mode: Ask your workspace admin to enable this under Workspace Settings → Permissions & Roles → Connected Data.
  2. Connect MCP: Go to Settings → Connectors and toggle Developer Mode on.
  3. Add Custom Connector:
    • Click Add connector (or "Create custom connector").
    • Choose MCP as the source type.
  4. Configure:
    • Server URL: https://clickup-mcp.taazkareem.com/mcp
    • Authentication: Add HTTP header X-License-Key: your-license-key.
  5. Use: Start a Developer Mode chat and select your ClickUp connector via Add sources.

Configuration Path: <project-root>/.augment/settings.json

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Run this command in your terminal:

auggie mcp add ClickUp --url https://clickup-mcp.taazkareem.com/mcp \
  --header "X-License-Key: your-license-key"

Configuration Path: <project-root>/.codeium/windsurf/mcp_config.json

Option A: Remote / Streamable HTTP (Easiest)

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key"
      }
    }
  }
}

Option B: Local / STDIO

{
  "mcpServers": {
    "ClickUp": {
      "command": "npx",
      "args": ["-y", "@taazkareem/clickup-mcp-server@latest"],
      "env": {
        "CLICKUP_API_KEY": "your-api-key",
        "CLICKUP_TEAM_ID": "your-team-id",
        "CLICKUP_MCP_LICENSE_KEY": "your-license-key"
      }
    }
  }
}

For most MCP-compliant hosts (e.g. Smithery, MCP Inspector, custom GUIs):

  • Server URL: https://clickup-mcp.taazkareem.com/mcp
  • Auth Header: X-License-Key: your-license-key (Required for HTTP/SSE connections)

Advanced: OpenAI Agents SDK For developers building custom agents.

Python SDK:

from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async with MCPServerStreamableHttp(
    name="clickup",
    params={
        "url": "https://clickup-mcp.taazkareem.com/mcp",
        "headers": {"X-License-Key": "your-license-key"},
    },
) as server:
    agent = Agent(
        name="Assistant",
        instructions="Use the ClickUp MCP tools when helpful.",
        mcp_servers=[server],
    )
    result = await Runner.run(agent, "List my workspaces.")

3. Restart

Restart your MCP Host (e.g., Cursor IDE). The server will validate your License Key and start automatically.


🛠️ Available Tools

| Category | Tool | Description | | :----------------- | :---------------------------- | :------------------------------------------------------------------------------------------------------ | | Workspace | get_workspace | Get workspace structure and metadata (hierarchy, members, plan, seats, shared items, custom task types) | | | get_workspace_seats | Get member and guest seat utilization (used, total, available) | | | get_workspace_plan | Get plan details for the workspace (plan_name, plan_id) | | | get_audit_logs | Retrieve workspace audit logs (Enterprise only) | | Tasks | create_task | Create a task | | | get_task | Get single task details | | | update_task | Modify task properties | | | move_task | Move task to new list | | | duplicate_task | Copy task | | | delete_task | Remove task | | | add_task_to_list | Associate task with additional list (TIML) | | | remove_task_from_list | Remove task list association (TIML) | | | create_bulk_tasks | Create multiple tasks | | | update_bulk_tasks | Update multiple tasks | | | move_bulk_tasks | Move multiple tasks | | | delete_bulk_tasks | Delete multiple tasks | | | get_workspace_tasks | Search tasks with Deep Search filtering | | | get_comments | Get comments on a task, list, or view | | | create_comment | Create a comment on a task, list, or view | | | update_comment | Edit or resolve a comment | | | delete_comment | Delete a comment | | | get_comment_replies | Get threaded replies for a comment | | | create_comment_reply | Reply to a comment in a thread | | | add_comment_reaction | Add an emoji reaction to a comment | | | remove_comment_reaction | Remove an emoji reaction from a comment | | | get_comment_subtypes | Get post subtype IDs for the workspace | | | add_task_link | Link two tasks together | | | get_task_links | Get task links | | | delete_task_link | Remove a task link | | | add_task_dependency | Set a blocking dependency between tasks | | | delete_task_dependency | Remove a blocking dependency between tasks | | Attachments | list_attachments | List attachments for a task or file custom field (v3) | | | get_attachment | Get a specific attachment by ID or name (v3) | | | upload_attachment | Upload a file to a task or file custom field (v3) | | Checklists | create_checklist | Add a checklist to a task | | | edit_checklist | Rename or reorder a checklist | | | delete_checklist | Delete a checklist and all its items | | | create_checklist_item | Add an item to a checklist | | | edit_checklist_item | Update a checklist item (name, resolved, assignee, nesting) | | | delete_checklist_item | Remove an item from a checklist | | Sprints | get_active_sprint | Auto-detect the currently active sprint; returns tasks if exactly one found | | | list_sprints | List all sprints in a folder | | | get_sprint_tasks | Get tasks for a specific sprint list | | Lists | list_lists | Retrieve lists in a space (folderless) or in a folder | | | get_list | Get list details | | | create_list | Create a list in a space or folder | | | create_list_from_template | Create a new list from a template | | | update_list | Update list properties | | | delete_list | Delete a list | | | move_list | Move a list to a different space or folder (high-integrity) | | | set_list_permissions | Update list privacy and sharing (ACLs) | | Custom Fields | list_custom_fields | List field definitions for a list, folder, or space | | | create_custom_field | Add a new field definition to a list | | | set_custom_field_value | Set a field value on a task | | | remove_custom_field_value | Clear a field value from a task | | Spaces | list_spaces | List all spaces in the workspace | | | get_space | Get space details | | | create_space | Create a new space | | | update_space | Update space properties | | | delete_space | Delete a space | | | set_space_permissions | Update space privacy and sharing (ACLs) | | Goals | list_goals | List all goals in the workspace | | | get_goal | Get a goal with its key results | | | create_goal | Create a new goal | | | update_goal | Update a goal's properties | | | delete_goal | Delete a goal | | | create_key_result | Add a key result to a goal | | | update_key_result | Update a key result | | | delete_key_result | Delete a key result | | Views | list_views | List views for a space, folder, list, or workspace | | | get_view | Get a single view | | | create_view | Create a new view | | | update_view | Update a view | | | delete_view | Delete a view | | | get_view_tasks | Get tasks in a view | | Folders | list_folders | List all folders in a space | | | get_folder | Get folder details and its contained lists | | | create_folder | Create a folder in a space | | | update_folder | Update folder properties | | | delete_folder | Delete a folder | | | move_folder | Move a folder to a different space (high-integrity) | | | set_folder_permissions | Update folder privacy and sharing (ACLs) | | | create_folder_from_template | Create a folder from a template in a space | | Tags | list_space_tags | List all tags in a space | | | create_space_tag | Create a new space tag | | | update_space_tag | Update a space tag's name or colors | | | delete_space_tag | Delete a tag from a space | | | add_tag_to_task | Add tag to task | | | remove_tag_from_task | Remove tag from task | | Time Tracking | get_time_entries | Fetch historical time entries | | | get_current_time_entry | Get currently running timer | | | start_time_entry | Start tracking time for a task | | | stop_time_entry | Stop the active timer | | | add_time_entry | Manually log a time entry | | | update_time_entry | Modify an existing time entry | | | delete_time_entry | Delete a time entry | | | get_time_entry_tags | Fetch all workspace time entry tags | | | add_time_entry_tags | Add a tag to a time entry | | | update_time_entry_tags | Rename a workspace time entry tag globally | | | delete_time_entry_tags | Remove a tag from a time entry | | | get_time_entry_history | View edit history of a time entry | | | get_time_in_status | Get time-in-status for multiple tasks | | Docs | list_documents | List documents in a workspace or container | | | get_document | Get document metadata | | | create_document | Create a new standalone document | | | list_document_pages | List all pages in a document | | | get_document_page | Get content for a single page | | | get_document_pages | Get content for multiple pages in one call | | | create_document_page | Add a new page to a document | | | update_document_page | Modify an existing page (replace/append/prepend) | | Chat | list_chat_channels | List all channels in the workspace | | | get_chat_channel | Get a single channel | | | create_chat_channel | Create a new channel | | | update_chat_channel | Update a channel | | | delete_chat_channel | Delete a channel | | | get_chat_channel_members | Get members of a channel | | | get_chat_channel_followers | Get followers of a channel | | | create_chat_dm | Create a direct message channel | | | get_chat_messages | Get messages from a channel | | | create_chat_message | Send a message to a channel | | | update_chat_message | Edit a message | | | delete_chat_message | Delete a message | | | get_chat_message_replies | Get threaded replies to a message | | | create_chat_message_reply | Reply to a message in a thread | | | add_chat_reaction | Add an emoji reaction to a message | | | remove_chat_reaction | Remove an emoji reaction | | | get_chat_reactions | Get all reactions on a message | | | get_chat_tagged_users | Get users tagged in a message | | | get_chat_message_subtypes | Get post subtype IDs for the workspace | | Webhooks | list_webhooks | List all webhooks in the workspace | | | create_webhook | Create a new webhook | | | update_webhook | Update an existing webhook | | | delete_webhook | Delete a webhook permanently | | User Groups | list_user_groups | List all user groups in the workspace | | | create_user_group | Create a new user group | | | update_user_group | Rename a group or add/remove members | | | delete_user_group | Delete a user group | | Guests | invite_guest | Invite a guest to the workspace (Enterprise) | | | get_guest | Get guest details (Enterprise) | | | edit_guest | Edit guest display name or permissions (Enterprise) | | | remove_guest | Remove a guest from the workspace (Enterprise) | | | add_guest_to_task | Grant guest access to a task (Enterprise) | | | remove_guest_from_task | Revoke guest access from a task (Enterprise) | | | add_guest_to_list | Grant guest access to a list (Enterprise) | | | remove_guest_from_list | Revoke guest access from a list (Enterprise) | | | add_guest_to_folder | Grant guest access to a folder (Enterprise) | | | remove_guest_from_folder | Revoke guest access from a folder (Enterprise) | | Task Templates | get_task_templates | List available workspace templates | | | create_task_from_template | Create a task from a template | | Feedback | submit_feedback | Submit feedback or bug reports |

See full documentation for parameters and advanced usage.


⚙️ Advanced Configuration

Filter Available Tools

💡 Pro Tip! Reduce context noise for the AI by limiting available tools. There are 3 ways to do this. You can filter by exact tool name, by tool category, by personas (presets), or a combination of all three.

Local (Environment Variable):

"ENABLED_TOOLS": "tool_1,tool_2,tool_3",
"ENABLED_CATEGORIES": "task,time_tracking,workspace"

-or- Remote (Header):

"X-Enabled-Tools": "tool_1,tool_2,tool_3",
"X-Enabled-Categories": "task,time_tracking,workspace"

Preset Configurations

Simplify setup by using Personas. You can set a persona via the CLICKUP_MCP_PERSONA environment variable or the X-Persona HTTP header to automatically filter a set of tools.

Multiple personas can be combined (e.g., "X-Persona": "task_worker,time_specialist").

Local (Environment Variable):

"CLICKUP_MCP_PERSONA": "task_worker"

-or- Remote (Header):

"X-Persona": "task_worker"

💡 Need to customize? To view the exact tools included in each preset or to build a custom list based on a persona, see the Personas Reference Guide.


🌍 Multi-Workspace Support

Simultaneously federate OAuth and multiple API keys to manage tasks across different authorized ClickUp accounts/workspaces in a single session. Easily move or duplicate tasks between workspaces, configure AI Agents for cross-workspace automation, and more.

Remote (Headers):

{
  "mcpServers": {
    "ClickUp": {
      "url": "https://clickup-mcp.taazkareem.com/mcp",
      "headers": {
        "X-License-Key": "your-license-key",
        "X-ClickUp-Additional-Keys": "shared_ws_api_key1,shared_ws_api_key2"
      }
    }
  }
}

❓ FAQ

Why isn't this free anymore? Building reliable MCP integrations requires significant maintenance. Moving to a paid model allows us to support this as a product rather than a hobby, ensuring compatibility with API changes.

I have an old version. Will it stop working? Existing local clones will continue to work, but you will not receive updates, bug fixes, or support without a license.

How do I get support? Premium users get priority support. Please open an issue in this repository.


⚖️ Disclaimer

Originally developed as open source and refined during a consultancy with ClickUp, this project is now independently maintained.

This software makes use of third-party APIs and may reference trademarks or brands owned by third parties. The use of such APIs or references does not imply any affiliation with or endorsement by the respective companies. All trademarks and brand names are the property of their respective owners. This project is an independent work and is not officially associated with or sponsored by any third-party company mentioned.