Quire MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Quire MCP Server list my tasks in the Q3 Planning project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Quire MCP Server
A Model Context Protocol (MCP) server for the Quire project management platform.
This server allows AI assistants (like Claude) to interact with your Quire projects, tasks, and data securely.
Quick Start
Prerequisites
Node.js v22 or higher
A Quire account
A Quire OAuth app (see Create a Quire OAuth App)
Step 1: Create a Quire OAuth App
Go to Quire App Management
Click Create new app
Set Redirect URL to:
http://localhost:3000/callbackChoose the permission scopes you need
Copy the Development Client ID and Development Client Secret
Step 2: Configure Your MCP Client
Choose the setup that matches your MCP client:
Claude Desktop (Recommended)
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"quire": {
"command": "npx",
"args": ["-y", "quire-mcp"],
"env": {
"QUIRE_OAUTH_CLIENT_ID": "your-client-id",
"QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
}
}
}
}Claude Code (CLI)
Add to your Claude Code MCP settings (~/.claude/mcp.json or project-level):
{
"mcpServers": {
"quire": {
"command": "npx",
"args": ["-y", "quire-mcp"],
"env": {
"QUIRE_OAUTH_CLIENT_ID": "your-client-id",
"QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
}
}
}
}Cursor
In Cursor settings, add an MCP server:
{
"mcpServers": {
"quire": {
"command": "npx",
"args": ["-y", "quire-mcp"],
"env": {
"QUIRE_OAUTH_CLIENT_ID": "your-client-id",
"QUIRE_OAUTH_CLIENT_SECRET": "your-client-secret"
}
}
}
}Step 3: First-Time Authorization
On first use, the server will:
Print an authorization URL to the console
Wait for you to open that URL in your browser
After you grant access, Quire redirects to localhost
The server captures the tokens and caches them
Subsequent uses will automatically refresh tokens as needed.
Related MCP server: MCP Feishu Project Manager
Transport Modes
The server supports two transport modes: stdio (default) and http.
STDIO Mode (Default)
STDIO mode is the simplest setup. The MCP client spawns the server process directly and communicates via JSON-RPC over stdin/stdout.
How it works:
MCP client spawns
npx quire-mcpwith environment variablesOn first tool call, if no cached token exists, the server prints an OAuth URL to stderr
User opens URL in browser and authorizes
Quire redirects to
localhost:3000/callbackwhere the server captures the tokenToken is cached to disk for future use
Token cache locations:
Windows:
%APPDATA%\quire-mcp\tokens.jsonmacOS:
~/Library/Application Support/quire-mcp/tokens.jsonLinux:
~/.config/quire-mcp/tokens.json
HTTP Mode
HTTP mode runs an HTTP server with OAuth 2.0 endpoints. Use this when you need:
A long-running server process
Multiple clients connecting to the same server
Deployment to a remote host (e.g., Cloudflare Workers, cloud VMs)
Important: In HTTP mode, the server must be running before clients can connect. Environment variables are set on the server process, not in client configs.
Running HTTP Mode Locally
Step 1: Start the server:
# Using npx
QUIRE_OAUTH_CLIENT_ID=your-client-id \
QUIRE_OAUTH_CLIENT_SECRET=your-client-secret \
MCP_TRANSPORT=http \
npx quire-mcp
# Or using pnpm (for development)
pnpm dev:httpThe server will output:
[quire-mcp] HTTP server listening on 127.0.0.1:3001
[quire-mcp] OAuth metadata: http://localhost:3001/.well-known/oauth-authorization-server
[quire-mcp] MCP endpoint: http://localhost:3001/mcpStep 2: Configure your MCP client to connect:
{
"mcpServers": {
"quire": {
"type": "http",
"url": "http://localhost:3001/mcp"
}
}
}Note: No env section is needed in the client config for HTTP mode—the OAuth credentials are on the server.
Step 3: When the MCP client connects, it will:
Discover OAuth endpoints via
/.well-known/oauth-authorization-serverRedirect you to authorize with Quire
Exchange tokens and establish a session
HTTP Mode Environment Variables
Variable | Required | Default | Description |
| Yes |
| Set to |
| Yes | - | Quire OAuth Client ID |
| Yes | - | Quire OAuth Client Secret |
| No |
| Host to bind the HTTP server |
| No |
| Port for the HTTP server |
| No |
| Base URL for OAuth endpoints |
| No |
| Quire OAuth callback URL |
Quire App Configuration for HTTP Mode:
When using HTTP mode, update your Quire app's redirect URL to: http://localhost:3001/oauth/callback
Manual Token Mode
If you have a pre-obtained access token (e.g., from Postman), you can skip OAuth entirely:
{
"mcpServers": {
"quire": {
"command": "npx",
"args": ["-y", "quire-mcp"],
"env": {
"QUIRE_ACCESS_TOKEN": "your-access-token"
}
}
}
}Note: Manually-obtained tokens will eventually expire and won't auto-refresh without OAuth credentials.
Configuration Reference
All Environment Variables
Variable | Required | Default | Description |
| Yes* | - | Quire OAuth Client ID |
| Yes* | - | Quire OAuth Client Secret |
| No | - | Manual token override (skips OAuth flow) |
| No |
| OAuth callback URL (stdio mode) |
| No | Platform default | Path to token cache file |
| No |
| Transport mode: |
| No |
| HTTP server bind address |
| No |
| HTTP server port |
| No |
| OAuth issuer URL (HTTP mode) |
*Required unless QUIRE_ACCESS_TOKEN is set.
Features
Tools
The server provides 60+ tools organized by category:
Authentication
Tool | Description |
| Get the current authenticated user's profile |
Organizations
Tool | Description |
| List all accessible organizations |
| Get organization details by ID or OID |
| Update organization followers |
Projects
Tool | Description |
| List all projects, optionally filtered by organization |
| Get project details including task counts |
| Update project name, description, icon, and followers |
| Export project tasks in JSON or CSV format |
Tasks
Tool | Description |
| List tasks in a project (root-level or subtasks) |
| Get task details by project+ID or OID |
| Create a new task with optional priority, dates, assignees, tags |
| Update task properties |
| Delete a task and its subtasks |
| Search tasks in a project by keyword and filters |
| Create a task after a specified task |
| Create a task before a specified task |
| Search tasks within a folder |
| Search tasks across an entire organization |
Tags
Tool | Description |
| List all tags in a project |
| Get tag details by OID |
| Create a new tag with name and color |
| Update tag name or color |
| Delete a tag |
Comments
Tool | Description |
| List all comments on a task |
| Add a comment to a task |
| Update comment text |
| Delete a comment |
| List all comments in a chat channel |
| Add a comment to a chat channel |
Users
Tool | Description |
| Get user details by ID, OID, or email |
| List all accessible users |
| List all members of a project |
Custom Statuses
Tool | Description |
| List custom statuses in a project |
| Get status details by value |
| Create a custom workflow status |
| Update status name or color |
| Delete a custom status |
External Teams (Partners)
Tool | Description |
| Get external team details |
| List all external teams in a project |
Documents
Tool | Description |
| Create a document in an organization or project |
| Get document content and metadata |
| List all documents |
| Update document name or content |
| Delete a document |
Sublists
Tool | Description |
| Create a sublist |
| Get sublist details |
| List all sublists |
| Update sublist name or description |
| Delete a sublist |
Chat Channels
Tool | Description |
| Create a chat channel |
| Get chat channel details |
| List all chat channels |
| Update chat name, description, or members |
| Delete a chat channel |
Key-Value Storage
Tool | Description |
| Get a stored value by key |
| List storage entries by prefix |
| Store a value |
| Delete a stored value |
Notifications
Tool | Description |
| Send notification to users |
Attachments
Tool | Description |
| Upload a file attachment to a task |
| Upload a file attachment to a comment |
Resources
The server exposes data as MCP resources:
Static Resources
Resource URI | Description |
| Current authenticated user's profile |
| List of all accessible organizations |
| List of all accessible projects |
Resource Templates
Resource URI | Description |
| Specific project details and metadata |
| Root tasks in a project |
| Tags defined in a project |
| Custom statuses in a project |
Prompts
The server provides guided prompts for common workflows:
Prompt | Description |
| Generate a task plan from a goal description |
| Generate a daily standup summary |
| Plan a sprint from the backlog |
| Break down a complex task into subtasks |
| Generate a weekly progress report |
Development
Setup
# Clone the repo
git clone https://github.com/jacob-hartmann/quire-mcp.git
cd quire-mcp
# Use the Node.js version from .nvmrc
# (macOS/Linux nvm): nvm install && nvm use
# (Windows nvm-windows): nvm install 22 && nvm use 22
nvm install
nvm use
# Install dependencies
pnpm install
# Copy .env.example and configure
cp .env.example .env
# Edit .env with your OAuth credentialsRunning Locally
# Development mode (stdio, auto-reload)
pnpm dev
# Development mode (http, auto-reload)
pnpm dev:http
# Production build
pnpm build
# Production run
pnpm start # stdio mode
pnpm start:http # http modeDebugging
You can use the MCP Inspector to debug the server:
# Run from source
pnpm inspect
# Run from built output
pnpm inspect:distpnpm inspect loads .env automatically via dotenv (see .env.example).
If you see Ignored build scripts: esbuild..., run pnpm approve-builds and allow esbuild.
In CI we install dependencies with lifecycle scripts disabled (pnpm install --ignore-scripts) and then explicitly rebuild only esbuild for the production build job.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines on how to contribute to this project.
Security
See SECURITY.md for security policy and reporting vulnerabilities.
Support
This is a community project provided "as is" with no guaranteed support. See SUPPORT.md for details.
License
MIT © Jacob Hartmann
Available Tools
61 toolsquire.addChatCommentA
Add a comment to a chat channel by OID, or by project ID and chat ID.
Inputs: description (required), chatOid, projectId, chatId, +2 more.
quire.addTaskCommentB
Add a comment to a task. Can be accessed by task OID or by project ID + task number.
Inputs: description (required), taskOid, projectId, taskId, +2 more.
quire.createChatB
Create a new chat channel in a project.
Inputs: ownerId (required), name (required), ownerType, id, +6 more.
quire.createDocumentC
Create a new document in an organization or project.
Inputs: ownerType (required), ownerId (required), name (required), id, +6 more.
quire.createStatusA
Create a custom status in a project. Custom statuses allow you to define workflow stages beyond the default To-Do (0) and Complete (100).
Inputs: projectId (required), name (required), value (required), color.
quire.createSublistC
Create a new sublist in an organization, project, folder, or smart-folder.
Inputs: ownerType (required), ownerId (required), name (required), id, +7 more.
quire.createTagB
Create a new tag in a project. Tags help organize and categorize tasks.
Inputs: projectId (required), name (required), global, color.
quire.createTaskA
Create a new task in a project or as a subtask of an existing task. To create a root task, provide a project ID/OID. To create a subtask, provide a parent task OID. To position a task relative to another, use createTaskAfter or createTaskBefore instead.
Inputs: projectId (required), name (required), description, priority, +5 more.
quire.createTaskAfterB
Create a new task immediately after a specified task. The new task will be at the same level as the reference task.
Inputs: taskOid (required), name (required), description, priority, +5 more.
quire.createTaskBeforeA
Create a new task immediately before a specified task. The new task will be at the same level as the reference task.
Inputs: taskOid (required), name (required), description, priority, +5 more.
quire.deleteChatADestructive
Delete a chat channel by OID, or by owner type/ID and chat ID. This action cannot be undone.
Inputs: oid, ownerType, ownerId, chatId.
quire.deleteCommentADestructive
Delete a comment. This action cannot be undone.
Inputs: oid (required).
quire.deleteDocumentADestructive
Delete a document by OID, or by owner type/ID and document ID. This action cannot be undone.
Inputs: oid, ownerType, ownerId, documentId.
quire.deleteStatusADestructive
Delete a custom status. Tasks with this status will be reverted to the default To-Do status. You cannot delete the default statuses (0 and 100).
Inputs: projectId (required), value (required).
quire.deleteStorageValueADestructive
Delete a stored value by name. This action cannot be undone.
Inputs: name (required).
quire.deleteSublistADestructive
Delete a sublist by OID, or by owner type/ID and sublist ID. This action cannot be undone.
Inputs: oid, ownerType, ownerId, sublistId.
quire.deleteTagADestructive
Delete a tag. This will remove the tag from all tasks that have it.
Inputs: oid (required).
quire.deleteTaskADestructive
Delete a task and all its subtasks. This action cannot be undone.
Inputs: oid (required).
quire.exportProjectARead-only
Export all tasks from a project in JSON or CSV format. Useful for backups, analysis, or integrations. Supports progress notifications for large exports when client provides a progressToken.
Inputs: id (required), format, status, merge.
quire.getChatARead-only
Get a chat channel by OID, or by owner type/ID and chat ID.
Inputs: oid, ownerType, ownerId, chatId.
quire.getDocumentARead-only
Get a document by OID, or by owner type/ID and document ID.
Inputs: oid, ownerType, ownerId, documentId.
quire.getOrganizationARead-only
Get detailed information about a specific organization by its ID or OID. Use this to get full details including member count, project count, and followers.
Inputs: id (required).
quire.getPartnerARead-only
Get details of an external team (partner) by OID.
Inputs: oid (required).
quire.getProjectARead-only
Get detailed information about a specific project by its ID or OID. Returns full project details including task counts, organization, and owner.
Inputs: id (required).
quire.getStatusARead-only
Get detailed information about a specific custom status by its value.
Inputs: projectId (required), value (required).
quire.getStorageValueARead-only
Get a stored value by name from Quire's key-value storage.
Inputs: name (required).
quire.getSublistARead-only
Get a sublist by OID, or by owner type/ID and sublist ID.
Inputs: oid, ownerType, ownerId, sublistId.
quire.getTagARead-only
Get detailed information about a specific tag by its OID.
Inputs: oid (required).
quire.getTaskARead-only
Get detailed information about a specific task. Can be retrieved by project ID + task ID, or by task OID alone.
Inputs: projectId, taskId, oid.
quire.getUserARead-only
Get detailed information about a user by their ID, OID, or email. Returns user profile including name, email, and image.
Inputs: id (required).
quire.listChatCommentsARead-only
List all comments on a chat channel by OID, or by project ID and chat ID.
Inputs: chatOid, projectId, chatId.
quire.listChatsARead-only
List all chat channels in a project.
Inputs: ownerId (required), ownerType.
quire.listDocumentsARead-only
List all documents in an organization, project, folder, or smart-folder.
Inputs: ownerType (required), ownerId (required).
quire.listOrganizationsARead-only
List all organizations accessible to the current user. Returns an array of organization objects with basic information.
Inputs: no named parameters.
quire.listPartnersARead-only
List all external teams (partners) in a project.
Inputs: projectId (required).
quire.listProjectMembersARead-only
List all members of a project. Returns an array of user objects who have access to the project.
Inputs: projectId (required).
quire.listProjectsARead-only
List all projects accessible to the current user. Optionally filter by organization, archived status, or write access.
Inputs: organizationId, archived, addTask.
quire.listStatusesARead-only
List all custom statuses in a project. Returns an array of status objects with value, name, and color. Default statuses (0=To-Do, 100=Complete) are always available.
Inputs: projectId (required).
quire.listStorageEntriesARead-only
List all storage entries with a given prefix. Useful for finding related stored values.
Inputs: prefix (required).
quire.listSublistsARead-only
List all sublists in an organization, project, folder, or smart-folder.
Inputs: ownerType (required), ownerId (required).
quire.listTagsARead-only
List all tags in a project. Returns an array of tag objects with name, color, and identifiers.
Inputs: projectId (required).
quire.listTaskCommentsARead-only
List all comments on a task. Can be accessed by task OID or by project ID + task number.
Inputs: taskOid, projectId, taskId.
quire.listTasksARead-only
List tasks in a project. Returns root-level tasks by default, or subtasks if a parent task OID is provided.
Inputs: projectId (required), parentTaskOid.
quire.listUsersARead-only
List all users accessible to the current user. Returns an array of user objects with basic profile information.
Inputs: no named parameters.
quire.putStorageValueAIdempotent
Store a value in Quire's key-value storage. Overwrites any existing value with the same name.
Inputs: name (required), value (required).
quire.searchFolderTasksARead-only
Search for tasks within a specific folder by keyword and optional filters.
Inputs: folderId (required), keyword (required), status, priority, +2 more.
quire.searchOrganizationTasksARead-only
Search for tasks across an entire organization by keyword and optional filters. This searches all projects within the organization.
Inputs: organizationId (required), keyword (required), status, priority, +2 more.
quire.searchTasksARead-only
Search for tasks in a project by keyword and optional filters. Returns tasks matching the search criteria.
Inputs: projectId (required), keyword (required), status, priority, +2 more.
quire.sendNotificationA
Send a notification to the current authorized user. Optionally include a URL that the user can click to navigate to.
Inputs: message (required), url.
quire.updateChatAIdempotent
Update a chat channel's properties by OID, or by owner type/ID and chat ID.
Inputs: oid, ownerType, ownerId, chatId, +8 more.
quire.updateCommentAIdempotent
Update an existing comment's text or pin status.
Inputs: oid (required), description, pinned.
quire.updateDocumentBIdempotent
Update a document's properties by OID, or by owner type/ID and document ID.
Inputs: oid, ownerType, ownerId, documentId, +8 more.
quire.updateOrganizationAIdempotent
Update an organization's followers. You can set the complete list of followers, or add/remove specific followers.
Inputs: id (required), followers, addFollowers, removeFollowers.
quire.updateProjectCIdempotent
Update a project's settings including name, description, and followers.
Inputs: id (required), name, description, archived, +3 more.
quire.updateStatusCIdempotent
Update a custom status's name, value, or color.
Inputs: projectId (required), value (required), name, newValue, +1 more.
quire.updateSublistAIdempotent
Update a sublist's properties by OID, or by owner type/ID and sublist ID.
Inputs: oid, ownerType, ownerId, sublistId, +9 more.
quire.updateTagAIdempotent
Update a tag's name, global status, or color.
Inputs: oid (required), name, global, project, +1 more.
quire.updateTaskAIdempotent
Update an existing task. Can be identified by project ID + task ID, or by task OID alone. Only provided fields will be updated.
Inputs: projectId, taskId, oid, name, +11 more.
quire.uploadCommentAttachmentA
Upload a file attachment to a comment. The content should be provided as a string (e.g., text content or base64-encoded binary).
Inputs: commentOid (required), filename (required), content (required), mimeType.
quire.uploadTaskAttachmentC
Upload a file attachment to a task. The content should be provided as a string (e.g., text content or base64-encoded binary).
Inputs: taskOid (required), filename (required), content (required), mimeType.
quire.whoamiARead-only
Get the current authenticated user's profile from Quire. Use this to verify your authentication is working and to see basic information about the connected Quire account.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 61 tools
Each tool targets a distinct resource-action combination (e.g., createTask vs createChat, addTaskComment vs addChatComment). Even related tools like createTask/createTaskAfter/createTaskBefore are clearly differentiated by their descriptions.
All tools follow a consistent 'quire.{verb}{Resource}' pattern in camelCase (e.g., createTask, listChats, getProject). The verbs (add, create, delete, get, list, search, etc.) are uniform across the set.
With 61 tools, the set is large but justified for a comprehensive project management API covering tasks, chats, documents, organizations, projects, storage, and more. However, it slightly exceeds the typical well-scoped range.
The tool surface covers most core operations (CRUD for tasks, chats, documents, statuses, etc.), but notable gaps exist: add/remove project members, create/delete organizations, and other lifecycle management features are missing.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI agents to interact with ClickUp workspaces, allowing task creation, management, and workspace organization through natural language commands.211,112 npm2MIT
- AlicenseBqualityFmaintenanceA Model Context Protocol server that enables AI assistants to interact with Feishu project management systems, allowing retrieval of project views and work items.612MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables LLMs to interact with Plane.so, allowing them to manage projects and issues through Plane's API for streamlined project management workflows.640MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server providing AI assistants with comprehensive project, task, and subtask management capabilities with project-specific storage.2924 npm88MIT