{"serverInfo":{"name":"hubity","title":"Hubity","version":"160.1.0"},"description":"Ask your AI assistant to preview the month's billing from approved time, retainers and progress, then draft invoices. Reads follow your role; drafting invoices or logging time needs your approval.","websiteUrl":"https://hubity.io","documentationUrl":"https://hubity.io/integrations/mcp","icons":[{"src":"https://hubity.io/icon-512.png","mimeType":"image/png","sizes":["512x512"]},{"src":"https://hubity.io/icon-192.png","mimeType":"image/png","sizes":["192x192"]}],"protocolVersion":"2026-07-28","supportedProtocolVersions":["2026-07-28","2025-11-25"],"endpoint":"https://hubity.io/api/mcp","transport":{"type":"streamable-http","endpoint":"https://hubity.io/api/mcp"},"authentication":{"required":true,"schemes":["oauth2"],"protectedResourceMetadata":"https://hubity.io/.well-known/oauth-protected-resource/api/mcp"},"capabilities":{"tools":{},"resources":{},"prompts":{}},"tools":[{"name":"search_knowledge","title":"Search Knowledge Base","description":"Find company documents by keyword, or open one in full. Sensitive documents are excluded.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query (matches title and content). Required unless id is given.","maxLength":200},"limit":{"type":"number","description":"Max results (1-20, default 5)","minimum":1,"maximum":20},"category":{"type":"string","description":"Optional category filter, for example mission, brand, process, competitive, contract or meeting_notes"},"id":{"type":"string","description":"Return this one document in full under `document`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"log_time_entry","title":"Log Time Entry","description":"Record time you worked, optionally against a project or task. A request repeated with the same request key within a day is recorded once.","inputSchema":{"type":"object","properties":{"entryDate":{"type":"string","format":"date","description":"The work date as YYYY-MM-DD (e.g. \"2026-03-29\"). Defaults to today."},"hours":{"type":"number","exclusiveMinimum":0,"maximum":24,"description":"Hours worked (e.g. 1.5). Give hours or minutes, not both; one of the two is required."},"minutes":{"type":"integer","minimum":1,"maximum":1440,"description":"Minutes worked (e.g. 90). Give hours or minutes, not both; one of the two is required."},"description":{"type":"string","description":"What was done","maxLength":500},"projectId":{"type":"string","description":"Project ID to associate with (optional)"},"taskId":{"type":"string","maxLength":128,"description":"Task ID to log against (optional). With no projectId, the entry goes on the task's project; with one, the task must be on that project."},"billable":{"type":"boolean","description":"Whether the time is billable (default true)"},"userId":{"type":"string","description":"Leave out when signed in: the entry is always the connected user's, and any other ID is refused. Only a workspace connection with no signed-in user passes it, naming whose time this is."},"requestKey":{"type":"string","pattern":"^[A-Za-z0-9._:-]{8,128}$","description":"A key you make up for this one entry (8 to 128 letters, digits, dots, colons, underscores or hyphens). A repeat with the same key within a day returns the first entry instead of logging another."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"create_invoice_from_proposal","title":"Create Invoice from Proposal","description":"Turn an accepted proposal into a draft invoice.","inputSchema":{"type":"object","properties":{"proposalId":{"type":"string","description":"ID of the accepted proposal to convert"},"netDays":{"type":"number","description":"Payment terms in days (default 30)","minimum":0,"maximum":365},"dueDate":{"type":"string","description":"Override due date as ISO string (overrides netDays if provided)"}},"required":["proposalId"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"preview_month_billing","title":"Preview Month Billing","description":"See what billing a month would put on each invoice, with anything that needs a decision first. Nothing is created or sent.","inputSchema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"The calendar month to bill, as YYYY-MM (e.g. \"2026-10\"). Give a month, or from and to. With neither, the last full month in the person's time zone."},"from":{"type":"string","format":"date","description":"First day of a custom period, YYYY-MM-DD. Needs to."},"to":{"type":"string","format":"date","description":"Last day of a custom period, YYYY-MM-DD. Needs from."},"projectId":{"type":"string","maxLength":128,"description":"Only this project."},"clientId":{"type":"string","maxLength":128,"description":"Only this client's projects (and its client-level expenses)."},"clientName":{"type":"string","maxLength":200,"description":"Only this client, by exact name (any case). When several clients share the name the call is refused with the candidates; ask which one, then pass clientId."},"limit":{"type":"integer","minimum":1,"maximum":25,"description":"Scopes per page (default 10)."},"cursor":{"type":"string","maxLength":512,"description":"nextCursor from the previous page of the same request."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"create_month_invoice_drafts","title":"Create Month Invoice Drafts","description":"Draft the month's invoices for you to review. Nothing is sent: you check and send each one in Hubity.","inputSchema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"The calendar month to bill, as YYYY-MM (e.g. \"2026-10\"). Give a month, or from and to. With neither, the last full month in the person's time zone."},"from":{"type":"string","format":"date","description":"First day of a custom period, YYYY-MM-DD. Needs to."},"to":{"type":"string","format":"date","description":"Last day of a custom period, YYYY-MM-DD. Needs from."},"projectId":{"type":"string","maxLength":128,"description":"Only this project."},"clientId":{"type":"string","maxLength":128,"description":"Only this client's projects (and its client-level expenses)."},"clientName":{"type":"string","maxLength":200,"description":"Only this client, by exact name (any case). When several clients share the name the call is refused with the candidates; ask which one, then pass clientId."},"limit":{"type":"integer","minimum":1,"maximum":25,"description":"Scopes per page (default 10)."},"cursor":{"type":"string","maxLength":512,"description":"nextCursor from the previous page of the same request."},"expectPlan":{"type":"object","description":"scopeKey -> planHash from preview_month_billing. A named scope whose plan changed is skipped (plan_changed); a scope not named is skipped (not_confirmed).","additionalProperties":{"type":"string","pattern":"^[0-9a-f]{64}$"}}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_utilization_report","title":"Get Utilization Report","description":"See how logged hours compare with each person's available capacity over a past or current period.","inputSchema":{"type":"object","properties":{"startDate":{"type":"string","format":"date","description":"Start date, YYYY-MM-DD (e.g. \"2026-03-01\"). Defaults to the first day of the current month."},"endDate":{"type":"string","format":"date","description":"End date, YYYY-MM-DD (e.g. \"2026-03-31\"). Defaults to today."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"forecast_cash_flow","title":"Forecast Cash Flow","description":"See what is still owed and project expected incoming cash from outstanding invoices, unbilled work, and the proposal pipeline.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_project_profitability","title":"Get Project Profitability","description":"Compare what each project earned against what it cost, with margin, over its life or a chosen period.","inputSchema":{"type":"object","properties":{"projectId":{"type":"string","description":"Optional: filter to a single project by ID"},"from":{"type":"string","format":"date","description":"First day of the period, YYYY-MM-DD."},"to":{"type":"string","format":"date","description":"Last day of the period, YYYY-MM-DD, inclusive."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_projects","title":"List Projects","description":"See the projects underway, with status, health, client, and dates, for everyone or one client, or open one with its milestones and budget.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["active","completed","on_hold","canceled"],"description":"Filter by status. Defaults to active."},"clientId":{"type":"string","maxLength":128,"description":"Only projects for this client, by the clientId a project, invoice or deal row gave."},"limit":{"type":"number","description":"Max results (1-50, default 20)","minimum":1,"maximum":50},"id":{"type":"string","description":"Return this one project in full under `project`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_tasks","title":"List Tasks","description":"See what is on the task list, filtered by status, priority, or project, or open one task in full.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","in_progress","review","on_hold","blocked","completed"],"description":"Filter by status. Omit for open tasks (pending and in_progress)."},"priority":{"type":"string","enum":["low","medium","high","urgent"],"description":"Filter by priority: low, medium, high, urgent"},"project_id":{"type":"string","description":"Filter by project ID"},"limit":{"type":"number","description":"Max results (1-50, default 20)","minimum":1,"maximum":50},"id":{"type":"string","description":"Return this one task in full under `task`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_staff","title":"List Staff","description":"See who is on the team, with roles, departments, and reporting lines, or open one profile.","inputSchema":{"type":"object","properties":{"department":{"type":"string","description":"Filter by department name (partial match)"},"firstNameStartsWith":{"type":"string","description":"Only people whose first name starts with this text (not case-sensitive)."},"lastNameStartsWith":{"type":"string","description":"Only people whose last name starts with this text (not case-sensitive)."},"limit":{"type":"number","description":"Max results (1-200, default 100)","minimum":1,"maximum":200},"id":{"type":"string","description":"Return this one person in full under `member`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_meetings","title":"List Meetings","description":"See past or upcoming meetings with their summaries and attendees, or read one meeting's notes and action items.","inputSchema":{"type":"object","properties":{"limit":{"type":"number","description":"Max results (1-50, default 20)","minimum":1,"maximum":50},"project_id":{"type":"string","description":"Filter by project ID (optional)"},"from":{"type":"string","format":"date","description":"Only meetings on or after this day, listed soonest first, YYYY-MM-DD."},"to":{"type":"string","format":"date","description":"Only meetings on or before this day, YYYY-MM-DD, inclusive."},"id":{"type":"string","description":"Return this one meeting in full under `meeting`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_invoices","title":"List Invoices","description":"See invoices with their status, amounts, and due dates, for everyone or one client, or open one with its line items.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["outstanding","overdue","draft","sent","partial","paid","void","write_off"],"description":"outstanding: still owes something. overdue: owes something and is past its due date. Both list the oldest due date first. The other values match the stored status. Omit for every invoice except voided ones."},"clientId":{"type":"string","maxLength":128,"description":"Only invoices for this client, by the clientId a project, invoice or deal row gave."},"limit":{"type":"number","description":"Max results (1-50, default 20)","minimum":1,"maximum":50},"id":{"type":"string","description":"Return this one invoice in full under `invoice`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_proposals","title":"List Proposals","description":"See proposals with their client, value, status, and date, such as the accepted ones ready to invoice, or read one in full.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","in_review","approved","sent","accepted","rejected","expired"],"description":"Filter by status, as each row reports it."},"clientId":{"type":"string","maxLength":128,"description":"Only proposals for this client, by clientId. Older quotes carry no client id, so they are left out."},"limit":{"type":"number","description":"Max results (1-50, default 20)","minimum":1,"maximum":50},"id":{"type":"string","description":"Return this one proposal in full under `proposal`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_deals","title":"List Deals","description":"See sales opportunities and their estimated value, filtered by stage or owner, or open one with its recent activity.","inputSchema":{"type":"object","properties":{"stage":{"type":"string","enum":["prospect","qualified","proposal","negotiation","closed_won","closed_lost","closed_abandoned"],"description":"Filter by pipeline stage."},"owner_id":{"type":"string","description":"Filter by owner user ID"},"limit":{"type":"number","description":"Max results (default 20, max 100)","minimum":1,"maximum":100},"id":{"type":"string","description":"Return this one deal in full under `deal`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_pto_requests","title":"List Time Off Requests","description":"See time-off requests and their approval status, such as who is out on given days, or open one. What is visible depends on the person's role.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","denied","canceled"],"description":"Filter by status."},"user_id":{"type":"string","description":"Filter to one person by user ID. Results never go beyond the requests the connected person's role lets them see."},"from":{"type":"string","format":"date","description":"Only leave that ends on or after this day, YYYY-MM-DD."},"to":{"type":"string","format":"date","description":"Only leave that starts on or before this day, YYYY-MM-DD, inclusive."},"limit":{"type":"number","description":"Max results (default 20)","minimum":1,"maximum":100},"id":{"type":"string","description":"Return this one request under `request`, by the id an earlier list result gave. The other arguments are then ignored.","maxLength":100}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"prompts":[{"name":"bill_the_month","title":"Bill the Month","description":"Preview what the month would bill for each project and client, from approved time, retainers, progress and expenses, go through the decisions it flags, then offer to draft the invoices for review. Nothing is sent.","arguments":[{"name":"month","description":"The month to bill, as YYYY-MM (default: the last full month)","required":false}]},{"name":"month_end_wip","title":"Month-End WIP","description":"Month-end work in progress: what is approved and ready to bill, time still waiting for approval, other decisions before billing, and draft invoices waiting for someone to review and send.","arguments":[{"name":"month","description":"The month to close, as YYYY-MM (default: the last full month)","required":false}]},{"name":"whos_over_capacity","title":"Who's Over Capacity","description":"Hours each person logged against the hours they had available over a period, who went over and by how much, and who has room.","arguments":[{"name":"from","description":"First day, as YYYY-MM-DD (default: the first of this month)","required":false},{"name":"to","description":"Last day, as YYYY-MM-DD (default: today)","required":false}]},{"name":"projects_losing_money","title":"Projects Losing Money","description":"Project margin, worst first: what each project earned against what its time cost, the ones losing money, the thin ones to watch, and what to do about them.","arguments":[{"name":"from","description":"First day of a period, as YYYY-MM-DD (default: each project's whole life)","required":false},{"name":"to","description":"Last day of a period, as YYYY-MM-DD","required":false}]},{"name":"collections","title":"Collections","description":"Overdue invoices grouped by how late they are, with a suggested follow-up order and action for each, and the total to collect.","arguments":[]},{"name":"standup","title":"Standup","description":"Brief a standup. For the team: work completed, in progress and blocked, meetings today and tomorrow, time logged and who is out. For one project: what was done this week, what is open or blocked, and the next milestone.","arguments":[{"name":"project","description":"A project name or id, for that project's standup (optional; leave out for the team)","required":false},{"name":"department","description":"For the team standup, limit it to one department or team (optional)","required":false},{"name":"lookback_days","description":"For the team standup, days of activity to cover (1-14, default 1)","required":false}]},{"name":"meeting_prep","title":"Meeting Prep","description":"A briefing for an upcoming meeting: who is attending and their roles, recent activity, and suggested agenda points.","arguments":[{"name":"meeting_id","description":"The meeting to prepare for, by its ID from the upcoming meetings list","required":true}]},{"name":"weekly_report","title":"Weekly Report","description":"A weekly report: tasks completed, meetings held, connector signals, and the meetings coming up.","arguments":[{"name":"lookback_days","description":"Days to look back (1-14, default 7)","required":false}]}],"resources":[{"uri":"hubity://calendar","name":"Today's Calendar","description":"Meetings scheduled for today, in your time zone","mimeType":"application/json"}],"resourceTemplates":[{"uriTemplate":"hubity://knowledge/{id}","name":"Knowledge Document","description":"One knowledge base document in full, by ID","mimeType":"application/json"},{"uriTemplate":"hubity://projects/{id}","name":"Project Detail","description":"One project in full, including milestones, by ID","mimeType":"application/json"}]}