← Files RuddrARCHIVED FILE
plugin.json
9.93 KB · Nov 6, 2026 · 18:21 UTC
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "ruddr",
"version": "1.0.12",
"description": "The AI-Native PSA. Ask about your projects, time, expenses, allocations, forecast, and key performance indicators.",
"author": {
"name": "Ruddr",
"email": "help@ruddr.io",
"url": "https://www.ruddr.com"
},
"homepage": "https://help.ruddr.io/getting-started/connect-ai-apps",
"keywords": [
"psa",
"professional services",
"time tracking",
"project management",
"billing",
"resource planning"
],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Ruddr",
"shortDescription": "The AI-Native PSA",
"longDescription": "Ruddr is the AI-Native PSA: time and expense tracking, resource management, project management, invoicing and payments, forecasting, revenue recognition, and sales pipeline \u2014 built so the data answers questions rather than waiting to be exported.\n\nThis app brings that into ChatGPT. It reaches clients and projects, time entries and timesheets, expenses, allocations and resource plans, project budgets and health, billing, invoices, payments and AR aging, revenue and margin, forecasting, and the sales pipeline.\n\nWhat makes it different is what comes back. Ruddr computes in the database and returns the answer, not rows to add up: budget variance, utilization, realization, effective bill rates, margin by client, project or practice, forecast against plan, and multicurrency totals converted at your workspace's own rates. A question that would take a report builder and a spreadsheet is a single request, and an answer you can act on.\n\nA connected app acts as you. It sees only what your Ruddr security role already allows, so it can never reach data you could not open yourself in Ruddr. Anything it records is attributed to you, and names the application as its source in the record's history. You choose which workspace to connect, and you can revoke access at any time from Connected Apps in your Ruddr profile.\n\nRequires a Ruddr account with the Ruddr Assistant enabled.",
"developerName": "Ruddr",
"category": "Productivity",
"websiteURL": "https://www.ruddr.com",
"supportURL": "https://help.ruddr.io",
"privacyPolicyURL": "https://www.ruddr.com/privacy-policy",
"termsOfServiceURL": "https://www.ruddr.com/master-subscription-agreement",
"defaultPrompt": [
"How are my projects tracking against their budgets this quarter?",
"Which clients have invoices more than 60 days overdue?",
"Help me fill out my timesheet for this week."
],
"brandColor": "#00B1AA",
"brandColorDark": "#00B1AA",
"logo": "./assets/logo.png",
"composerIcon": "./assets/logo.png"
},
"review": {
"test_cases": {
"positive": [
{
"description": "Project budget status. Read-only analytics through the project-budget namespace; figures come from the workspace, nothing is computed by the model. Note for reviewers on the ruddr-query / ruddr-command scan finding: the two tools are intentional. 1) Permission boundary: ruddr-query is read-only (mcp:read); ruddr-command is the only write path (mcp:write, creates the user's own time entries, non-destructive), so annotations and consent are exact per tool. 2) One shared schema: every operation has the same top-level schema and only per-entity filters vary, so unwrapping would add 90+ near-identical tools. 3) Progressive discovery: search lists operations, load returns each full JSON Schema, and run validates server-side against a fixed catalogue.",
"prompt": "Which projects are over their revenue budget this year?",
"tools_triggered": "skill-load (data-tools), ruddr-query (search project-budget, load and run project-revenue-budget)",
"expected_behavior": "Names the projects whose revenue-budget-used ratio is above 100% for the current year, with actual revenue, revenue budget, and remaining budget for each, matching the reviewer workspace. Does not invent projects. Makes no changes."
},
{
"description": "Member utilization. Read-only analytics through the member-actuals namespace.",
"prompt": "Who was under-utilized last month compared to their billable target?",
"tools_triggered": "skill-load (data-tools), ruddr-query (search member-actuals, load and run member-utilization)",
"expected_behavior": "Lists members whose billable hours fell short of their target billable hours last month, with billable utilization and target attainment for each, matching the reviewer workspace. Makes no changes."
},
{
"description": "Accounts receivable aging. Read-only billing data grouped by client.",
"prompt": "Which clients owe us money, and how overdue are they?",
"tools_triggered": "skill-load (data-tools), ruddr-query (search billing, load and run ar-aging)",
"expected_behavior": "Shows outstanding balances by client in current, 1-30, 31-60, 61-90 and 91+ day buckets in the workspace currency, with a total that matches the open invoices in the reviewer workspace. Makes no changes."
},
{
"description": "Sales pipeline summary. Read-only pipeline analytics grouped by stage.",
"prompt": "What's our open pipeline by stage, weighted and unweighted?",
"tools_triggered": "skill-load (data-tools), ruddr-query (search pipeline, load and run opportunity-summary)",
"expected_behavior": "Returns open opportunity amounts and weighted amounts grouped by pipeline and stage, with totals that match the reviewer workspace's open opportunities. Makes no changes."
},
{
"description": "Timesheet fill, the only write flow. Requires the write permission on the connection. Nothing is saved until the user confirms.",
"prompt": "Help me log my time for yesterday.",
"tools_triggered": "ruddr-command (run track-time-suggestions, then track-time-preflight, then track-time after the user confirms)",
"expected_behavior": "Offers suggested entries from the reviewer's recent time and allocations, validates the chosen entries with track-time-preflight, asks for confirmation, and only then saves them with track-time. Reports an entry as logged only when its status is tracked. The new entries appear on the reviewer's timesheet in Ruddr, attributed to ChatGPT as the source."
}
],
"negative": [
{
"description": "Unrelated request. The app should not be called.",
"prompt": "What's the weather in Boston tomorrow?"
},
{
"description": "Destructive request the app cannot perform. No delete command exists, so ChatGPT should say it cannot delete invoices through Ruddr and point the user to the Ruddr app, without calling ruddr-command.",
"prompt": "Delete last month's invoice for Acme in Ruddr."
},
{
"description": "Acting for another member. ruddr-command only records time for the member who connected the app, so ChatGPT should decline to log time for someone else and should not report any entry as saved.",
"prompt": "Log 8 hours yesterday for Jane Smith on the Website Redesign project."
}
]
},
"demo_recording_url": "https://www.loom.com/share/8f0730c283584a0487077df622155bc4",
"commerce": false,
"commerce_description": "Ruddr does not sell products or process payments through ChatGPT. The app reads workspace data and records time entries only."
},
"publication": {
"countries": [
"US",
"CA",
"MX",
"GB",
"IE",
"FR",
"DE",
"ES",
"PT",
"IT",
"NL",
"BE",
"LU",
"CH",
"AT",
"DK",
"SE",
"NO",
"FI",
"IS",
"PL",
"CZ",
"SK",
"HU",
"RO",
"BG",
"GR",
"HR",
"SI",
"EE",
"LV",
"LT",
"MT",
"CY",
"AU",
"NZ",
"ZA",
"IN",
"SG",
"BR",
"AR",
"CL",
"CO",
"PE",
"UY",
"PY",
"EC",
"BO"
],
"release_notes": "First release of Ruddr for ChatGPT. Connect your Ruddr workspace and ask about projects, budgets, utilization, invoices, receivables and pipeline, or log your own time right from the chat.\n\nWorking with your Ruddr data goes through two tools. ruddr-query reads: it lists the operations available for an area such as projects, time, billing or pipeline, loads the exact inputs each one takes, and runs it against your workspace. ruddr-command writes: today it logs time for you, and nothing is saved until you confirm it.\n\nKeeping reads and writes apart gives you a clear permission boundary: connecting with read access can never change anything, and write access is a separate consent. Every operation follows the same shape, so ChatGPT learns one way of working and only the filters change from one area to the next. Because ChatGPT discovers operations as it needs them instead of carrying all of them in every conversation, answers stay fast and accurate as Ruddr adds more reporting.\n\nAlongside them, a few helper tools answer questions from the Ruddr help center and API docs, check Ruddr's service status, show what's new, and let you open a support ticket or send product feedback.\n\nRuddr only shows what your Ruddr permissions allow, and anything it records is attributed to you with ChatGPT named as the source."
},
"apps": "./.app.json"
}
}
}
SHA-256: d28ce9582aa1a957c40be8b40b4127560440977fb67ee6d5294ab8cc88eeacb9