{"apiVersion":"v1","directorySlug":"dev9-mcp-20b834c232","title":"Dev9","description":"Dev9 Dashboard","pageUrl":"https://www.mcpbundles.com/skills/dev9-mcp-20b834c232","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://api.dev9.app/mcp","hostedMcpUrl":null,"toolCount":34,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"app.dev9/dev9-mcp-20b834c232","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"remember_fact","description":"Pin a durable fact about a subject so future conversations can recall it. Use for stable claims (preferences, roles, decisions) that should survive across conversations. Args: subject (canonical lowercase, e.g. \"raymond\"), predicate (short verb, e.g. \"prefers\"), objectText (the claim body), confidence (0..1, default 0.85).","inputSchema":{"type":"object","required":["subject","predicate","objectText"],"properties":{"subject":{"type":"string"},"predicate":{"type":"string"},"confidence":{"type":"number","default":0.85},"objectText":{"type":"string"},"sourceTurnId":{"type":["null","string"],"default":null}}},"logicalName":"remember_fact","displayName":"remember_fact","title":"remember_fact","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_project_knowledge","description":"Hybrid (dense + sparse) semantic search over the project knowledge index — tickets, comments, notes, retrospectives. Returns top-K hits with source links. Use this before answering questions about what is written down in a project. Pass either the project identifier (e.g. \"DEV9\", \"DPO\") or its UUID — both work.","inputSchema":{"type":"object","required":["projectId","query"],"properties":{"topK":{"type":"integer","default":10},"query":{"type":"string"},"projectId":{"type":"string"}}},"logicalName":"search_project_knowledge","displayName":"search_project_knowledge","title":"search_project_knowledge","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_notes","description":"List notes in the organization. Filter by folder (recursive descendants) and free-text search. Paginated.","inputSchema":{"type":"object","properties":{"page":{"type":"integer","default":1},"search":{"type":"string","default":""},"perPage":{"type":"integer","default":20},"folderId":{"type":"string","default":""}}},"logicalName":"list_notes","displayName":"list_notes","title":"list_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_notes","description":"Free-text search across the organization's notes via the global Postgres-vector index. Synonyms and word-stem matches surface (so \"design tokens\" finds \"Design system tokens\"). Returns up to `limit` ranked results.","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","default":20},"query":{"type":"string"}}},"logicalName":"search_notes","displayName":"search_notes","title":"search_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_note","description":"Fetch a single note by id or slug. Returns the note as markdown — the same format `update_note` accepts.","inputSchema":{"type":"object","required":["idOrSlug"],"properties":{"idOrSlug":{"type":"string"}}},"logicalName":"get_note","displayName":"get_note","title":"get_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_note","description":"Create a note from markdown. Slug is auto-generated from the title; snippet is auto-derived from the content.","inputSchema":{"type":"object","required":["title"],"properties":{"tagsCsv":{"type":"string","default":""},"folderId":{"type":"string","default":""},"markdown":{"type":"string","default":""}}},"logicalName":"create_note","displayName":"create_note","title":"create_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_note","description":"Partial update on a note by id or slug. Pass only the fields you want to change. `markdown=null` leaves content untouched; renaming the title regenerates the slug and archives the previous one for 301 redirects.","inputSchema":{"type":"object","required":["idOrSlug"],"properties":{"tagsCsv":{"type":["null","string"],"default":null},"folderId":{"type":["null","string"],"default":null},"idOrSlug":{"type":"string"},"markdown":{"type":["null","string"],"default":null}}},"logicalName":"update_note","displayName":"update_note","title":"update_note","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_projects","description":"Search projects in the organization. Filter by name/identifier query and status.","inputSchema":{"type":"object","properties":{"query":{"type":"string","default":""},"status":{"type":"string","default":""}}},"logicalName":"search_projects","displayName":"search_projects","title":"search_projects","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_sprints","description":"Search sprints for a project. Filter by status: planned, active, completed.","inputSchema":{"type":"object","required":["projectIdentifier"],"properties":{"status":{"type":"string","default":""},"projectIdentifier":{"type":"string"}}},"logicalName":"search_sprints","displayName":"search_sprints","title":"search_sprints","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_ticket","description":"Get full ticket details by identifier (e.g. PROJ-1). Returns all fields including description.","inputSchema":{"type":"object","required":["ticketIdentifier"],"properties":{"ticketIdentifier":{"type":"string"}}},"logicalName":"get_ticket","displayName":"get_ticket","title":"get_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_ticket_comments","description":"List all comments for a ticket, ordered by creation date.","inputSchema":{"type":"object","required":["ticketIdentifier"],"properties":{"ticketIdentifier":{"type":"string"}}},"logicalName":"list_ticket_comments","displayName":"list_ticket_comments","title":"list_ticket_comments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_tickets","description":"Search tickets for a project. Filter by query (title match), status, type, sprint ID, or parent ID.","inputSchema":{"type":"object","required":["projectIdentifier"],"properties":{"tag":{"type":"string","default":""},"type":{"type":"string","default":""},"query":{"type":"string","default":""},"status":{"type":"string","default":""},"parentId":{"type":"string","default":""},"sprintId":{"type":"string","default":""},"projectIdentifier":{"type":"string"}}},"logicalName":"search_tickets","displayName":"search_tickets","title":"search_tickets","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_ticket","description":"Create a new ticket in a project. Pass parentId to create a subtask. New tickets start in the first column of the project workflow (Project.workflowColumns[0].id); change status afterwards via update_ticket, which validates the value against the project's column ids.","inputSchema":{"type":"object","required":["projectIdentifier","title"],"properties":{"tags":{"type":["array","null"],"default":null},"type":{"type":"string","default":"task"},"color":{"type":["null","string"],"default":null},"parentId":{"type":["null","string"],"default":null},"priority":{"type":"string","default":"medium"},"sprintId":{"type":["null","string"],"default":null},"assigneeId":{"type":["null","string"],"default":null},"projectIdentifier":{"type":"string"}}},"logicalName":"create_ticket","displayName":"create_ticket","title":"create_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_ticket","description":"Update a ticket by its identifier (e.g. PROJ-1). Only provided fields are changed. `status` must match a column id from the ticket's project workflow (Project.workflowColumns[].id); the column label (case-insensitive) is also accepted and resolves to the id.","inputSchema":{"type":"object","required":["ticketIdentifier"],"properties":{"tags":{"type":["array","null"],"default":null},"type":{"type":["null","string"],"default":null},"color":{"type":["null","string"],"default":null},"status":{"type":["null","string"],"default":null},"dueDate":{"type":["null","string"],"default":null},"estimate":{"type":["null","string"],"default":null},"position":{"type":["null","integer"],"default":null},"priority":{"type":["null","string"],"default":null},"assigneeId":{"type":["null","string"],"default":null},"epicTargetDate":{"type":["null","string"],"default":null},"ticketIdentifier":{"type":"string"}}},"logicalName":"update_ticket","displayName":"update_ticket","title":"update_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"move_ticket","description":"Move a ticket to a different sprint. Pass an empty sprintId to move to backlog.","inputSchema":{"type":"object","required":["ticketIdentifier"],"properties":{"status":{"type":["null","string"],"default":null},"sprintId":{"type":["null","string"],"default":null},"ticketIdentifier":{"type":"string"}}},"logicalName":"move_ticket","displayName":"move_ticket","title":"move_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_comment_ticket","description":"Add a comment to a ticket.","inputSchema":{"type":"object","required":["ticketIdentifier","body"],"properties":{"body":{"type":"string"},"ticketIdentifier":{"type":"string"}}},"logicalName":"add_comment_ticket","displayName":"add_comment_ticket","title":"add_comment_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_comment_ticket","description":"Edit an existing comment by its ID.","inputSchema":{"type":"object","required":["commentId","body"],"properties":{"body":{"type":"string"},"commentId":{"type":"string"}}},"logicalName":"edit_comment_ticket","displayName":"edit_comment_ticket","title":"edit_comment_ticket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_sprint","description":"Create a new sprint for a project.","inputSchema":{"type":"object","required":["projectIdentifier","name"],"properties":{"goal":{"type":["null","string"],"default":null},"name":{"type":"string"},"endDate":{"type":["null","string"],"default":null},"startDate":{"type":["null","string"],"default":null},"projectIdentifier":{"type":"string"}}},"logicalName":"create_sprint","displayName":"create_sprint","title":"create_sprint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_sprint","description":"Update a sprint. Set status to \"active\" to start or \"completed\" to complete.","inputSchema":{"type":"object","required":["sprintId"],"properties":{"goal":{"type":["null","string"],"default":null},"name":{"type":["null","string"],"default":null},"status":{"type":["null","string"],"default":null},"endDate":{"type":["null","string"],"default":null},"sprintId":{"type":"string"},"startDate":{"type":["null","string"],"default":null}}},"logicalName":"update_sprint","displayName":"update_sprint","title":"update_sprint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_sprint","description":"Delete a planned sprint. Tickets are moved to backlog. Only planned sprints can be deleted.","inputSchema":{"type":"object","required":["sprintId"],"properties":{"sprintId":{"type":"string"}}},"logicalName":"delete_sprint","displayName":"delete_sprint","title":"delete_sprint","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_ticket_relation","description":"Create a relation between two tickets. Types: blocks, is_blocked_by, relates_to, duplicates.","inputSchema":{"type":"object","required":["ticketIdentifier","targetTicketIdentifier"],"properties":{"type":{"type":"string","default":"blocks"},"ticketIdentifier":{"type":"string"},"targetTicketIdentifier":{"type":"string"}}},"logicalName":"create_ticket_relation","displayName":"create_ticket_relation","title":"create_ticket_relation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"delete_ticket_relation","description":"Delete a relation between two tickets.","inputSchema":{"type":"object","required":["ticketIdentifier","targetTicketIdentifier"],"properties":{"type":{"type":"string","default":"blocks"},"ticketIdentifier":{"type":"string"},"targetTicketIdentifier":{"type":"string"}}},"logicalName":"delete_ticket_relation","displayName":"delete_ticket_relation","title":"delete_ticket_relation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_project_rules","description":"List the project-specific AI assistant context rules, in the order they should be applied (top-to-bottom). Returns [{id, title, body, position}]. Call this at the start of a new session on the project so the assistant picks up project-specific conventions the user has set.","inputSchema":{"type":"object","required":["projectIdentifier"],"properties":{"projectIdentifier":{"type":"string"}}},"logicalName":"list_project_rules","displayName":"list_project_rules","title":"list_project_rules","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_project_rules","description":"Replace the full set of AI assistant context rules for a project. Each entry needs `title` + `body`; omit `id` for new entries (server assigns a UUIDv7) or keep an existing `id` to preserve identity. Order in the array IS the persisted order — server normalises `position` to the array index. Returns the persisted list.","inputSchema":{"type":"object","required":["projectIdentifier","rules"],"properties":{"rules":{"type":"array"},"projectIdentifier":{"type":"string"}}},"logicalName":"update_project_rules","displayName":"update_project_rules","title":"update_project_rules","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"bulk_create_tickets","description":"Create multiple tickets with parent/child relations in one call. Use ref/parentRef for linking.","inputSchema":{"type":"object","required":["projectIdentifier","tickets"],"properties":{"tickets":{"type":"array"},"relations":{"type":["array","null"],"default":null},"projectIdentifier":{"type":"string"}}},"logicalName":"bulk_create_tickets","displayName":"bulk_create_tickets","title":"bulk_create_tickets","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"bulk_update_tickets","description":"Update multiple tickets at once. Accepts identifiers (e.g. DPO-278). Only non-null fields are applied. Use action \"delete\" for bulk delete. `status` is validated per-ticket against that ticket's project workflow (Project.workflowColumns[].id); labels are accepted and resolved to ids.","inputSchema":{"type":"object","required":["ticketIdentifiers"],"properties":{"action":{"type":["null","string"],"default":null},"status":{"type":["null","string"],"default":null},"estimate":{"type":["null","string"],"default":null},"parentId":{"type":["null","string"],"default":null},"priority":{"type":["null","string"],"default":null},"sprintId":{"type":["null","string"],"default":null},"assigneeId":{"type":["null","string"],"default":null},"ticketIdentifiers":{"type":"array"}}},"logicalName":"bulk_update_tickets","displayName":"bulk_update_tickets","title":"bulk_update_tickets","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"start_retrospective","description":"Create a retrospective for a sprint. Returns the retro ID and format.","inputSchema":{"type":"object","required":["sprintIdentifier"],"properties":{"format":{"type":["null","string"],"default":null},"sprintIdentifier":{"type":"string"}}},"logicalName":"start_retrospective","displayName":"start_retrospective","title":"start_retrospective","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"advance_retro_phase","description":"Advance the retrospective to the next phase. Phases: writing → revealed → discussing → voting → results → completed.","inputSchema":{"type":"object","required":["retroId"],"properties":{"retroId":{"type":"string"},"timerDuration":{"type":["null","integer"],"default":null}}},"logicalName":"advance_retro_phase","displayName":"advance_retro_phase","title":"advance_retro_phase","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_retro_card","description":"Add a card to a retrospective column. AI-generated cards are marked with metadata.","inputSchema":{"type":"object","required":["retroId","column","body"],"properties":{"body":{"type":"string"},"column":{"type":"string"},"retroId":{"type":"string"}}},"logicalName":"add_retro_card","displayName":"add_retro_card","title":"add_retro_card","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_retro_status","description":"Get the current status of a retrospective including phase, card counts, and timer.","inputSchema":{"type":"object","required":["retroId"],"properties":{"retroId":{"type":"string"}}},"logicalName":"get_retro_status","displayName":"get_retro_status","title":"get_retro_status","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"suggest_retro_cards","description":"Analyze sprint data and suggest retrospective cards based on velocity, blocked tickets, and status patterns.","inputSchema":{"type":"object","required":["sprintIdentifier"],"properties":{"sprintIdentifier":{"type":"string"}}},"logicalName":"suggest_retro_cards","displayName":"suggest_retro_cards","title":"suggest_retro_cards","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"summarize_retro","description":"Generate a summary of the retrospective from cards and votes, and save it to the retro.","inputSchema":{"type":"object","required":["retroId"],"properties":{"retroId":{"type":"string"}}},"logicalName":"summarize_retro","displayName":"summarize_retro","title":"summarize_retro","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"suggest_action_items","description":"Analyze retro cards and suggest action items with titles.","inputSchema":{"type":"object","required":["retroId"],"properties":{"retroId":{"type":"string"}}},"logicalName":"suggest_action_items","displayName":"suggest_action_items","title":"suggest_action_items","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"add_retro_action_item","description":"Add an action item to a retrospective.","inputSchema":{"type":"object","required":["retroId","title"],"properties":{"retroId":{"type":"string"},"assigneeId":{"type":["null","string"],"default":null}}},"logicalName":"add_retro_action_item","displayName":"add_retro_action_item","title":"add_retro_action_item","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Dev9&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkuZGV2OS5hcHAvbWNwIn0%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Dev9%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.dev9.app%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Dev9%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.dev9.app%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Dev9&connectorUrl=https%3A%2F%2Fapi.dev9.app%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Dev9\" --url \"https://api.dev9.app/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/dev9-mcp-20b834c232","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/dev9-mcp-20b834c232/tools/{tool}","mcpServerUrl":"https://api.dev9.app/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/dev9-mcp-20b834c232?live=1"}