Integration details
Description
Onplana connects ChatGPT to your project portfolio. Describe the work in a sentence and it builds the project for you: epics, tasks, estimates, dependencies and scheduled dates, in a single step. Search across projects, tasks, sprints, risks, comments, and wiki with hybrid BM25 + vector search. Read project state, update tasks, log time, surface portfolio-level insights, and generate status reports, all gated by your org's plan and role permissions, with every operation audited. Built for teams migrating from Microsoft Project Online ahead of its September 2026 retirement.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Hotel Search & Booking
- Secondary Subcategories
- None listed
- Brand
- Onplana
- Access
- Account required
- First tracked
- 2026-06-16
- Tool count
- 276
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Get alerts for Onplana
Get updates when Onplana’s Discoverability Score or category rank changes.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Project & Task Management Platforms
View Category276 tools agents can invoke
(Un)assign multiple tasks to one person in a single call. Pass assigneeId (a user id, or null to unassign) OR assigneeEmail (resolved against active org members) - mutually exclusive. Returns { updated, skipped, errors } so partial success is observable: skipped lists tasks already at that assignee; errors lists per-task failures (NOT_FOUND / PROJECT_ACCESS_DENIED). Up to 200 task ids per call. Use the single-task assign_task when you need optimistic-concurrency (expectedAssigneeRevision). Caller must have task.assign on each task's project; the target must be an active member of the organization.
bulk_assign
Add a project to a portfolio (BUSINESS+ feature). Requires org.portfolio.manage (default Manager+). Idempotent-safe: if the project is already in the portfolio, returns an error so the caller can detect duplicates.
add_project_to_portfolio
Add a user to the org-level Change Control Board. Requires org.governance.manage (Admin+ by default). Idempotent. User must be an active org member. Feature: changeControl (ENTERPRISE+).
add_ccb_member
Add a user to the designated timesheet approver list. Requires OWNER or ADMIN. Idempotent. User must be an active org member. Feature: timeTracking (PRO+).
add_timesheet_approver
Add an EXISTING active org member to a project. Pass userId (look up with list_org_members first) and role (OWNER/MANAGER/MEMBER/CONTRIBUTOR/VIEWER). Caller must have project.members.manage on the project. For inviting a brand-new email outside the org, use the invitation UI - this tool intentionally does not send emails.
add_project_member
Atomically create one or more subtasks under an existing parent task. All children inherit the parent's project. Returns the created ids. Up to 25 subtasks per call. Use this instead of calling create_task repeatedly when decomposing a claimed task — single transaction, single tool-call budget slot, atomic rollback on any failure.
add_subtasks
Aggregate risks across the caller's visible projects by category. Returns acceptedCount, dismissedCount, affectedProjects, and a verdict (recurring | frequently_dismissed | mixed) per category. Drives the "Pattern (X/Y projects)" badge on the Critical Risk Register widget. Optional windowDays (1..365, default 90) bounds the detection lookback.
compute_risk_patterns
Run AI risk analysis on one project - detected risks persist to the project risks table (visible via list_risks). Use this when the user asks "what could go wrong on Project X" or before a sprint planning meeting. Caller must have visibility into the project.
analyze_project_risks
Append a row to a workspace table. `cells` is a map of columnId to value (string|number|boolean|null). Unknown column ids return 400. Optional `order` (default = max(order)+1).
create_workspace_row
Append a streaming progress log line to the current agent conversation. Required: conversationId (the AiConversation this agent session belongs to), lineNum (monotonic integer the agent maintains), level (INFO/WARN/ERROR/DEBUG or any string <=8 chars), text (the log line up to 4000 chars). Optional taskId attaches the line to a specific task and triggers a real-time UI broadcast so humans see it land. No undo — log lines are append-only.
append_log
Append many rows to a workspace list (table) in one call, where create_workspace_row appends a single row per call. `rows` is an array, each entry a map of columnId to value (string|number|boolean|null); a row may omit any column. Unknown column ids are refused. Limits per call: 200 rows and 3000 cells in total, whichever is reached first, so a wide list takes fewer rows per call than a narrow one. Rows are appended in the order given, and the whole batch lands or none of it does.
bulk_create_workspace_rows
Approve a single SUBMITTED timesheet entry. Caller must be an eligible approver (OWNER/ADMIN/MANAGER in managers mode, or a designated approver in approvers mode). Feature: timeTracking (PRO+).
approve_timesheet_entry
Decide a PENDING workflow approval (APPROVED or REJECTED) with an optional note. Caller must be the assigned approver. Duplicate decisions return CONFLICT. The workflow engine picks the decision up on its next tick. Plan gate: automations (PRO+).
decide_workflow_approval
Ask the human PAT holder a question and wait for their answer via the get_user_input poll. Required: question (1-2000 chars). Optional: options (string[] of up to 10 choices; when set, the human must pick one), taskId (binds the prompt to a task so it appears on that task's detail panel), timeoutMinutes (1-120, default 30; after this the prompt flips to TIMED_OUT inline on the next get_user_input poll). Returns { requestId, status: "PENDING" }; poll get_user_input(requestId) until status changes. Fires an in-app + email notification at the PAT holder so they know to answer.
request_user_input
Assign a tag to a task or project. Provide either taskId or projectId, not both. The caller must have access to the target entity. Assigning a tag that is already on the target succeeds as a no-op (alreadyAssigned: true in the result).
assign_tag
Assign or unassign one task. Pass assigneeId=null to unassign. Alternatively pass assigneeEmail to resolve by org-member email (useful when the agent only knows the user's email and would otherwise need a separate list to find their id). Mutually exclusive with assigneeId. Optional expectedAssigneeRevision (integer): if supplied, the call fails with a CONFLICT error when another caller has assigned the task since you last read it. Returns the new claimRevision so you can chain consecutive assigns under optimistic concurrency. Caller must have task.assign on the project. Target must be an active member of the organization. On plans with resource management the result also carries `load`: the assignee's capacity for the week the task lands in, the hours already committed to their other open work, this task's share, whether that projection exceeds capacity (`over`, `overBy`), and the competing work that week (`otherWork`). Null when the task has no dates.
assign_task
Attach a SharePoint document to an Onplana project workspace as a LINK reference (externalProvider=SHAREPOINT). The file stays in SharePoint; Onplana stores only the URL + metadata. No file is downloaded or copied in V1 (security stance). Caller must have read access to the SharePoint site.
attach_sharepoint_document
Attach a file to a task by URL. The SERVER downloads the file (public http(s) URL only; internal/private addresses are blocked) and stores it as a real attachment, so the bytes never pass through the model (no truncation risk). Use this when the file already lives at a URL (cloud storage, a public link). Max 50 MB. fileName is optional (derived from the URL otherwise). For a file that exists only in your sandbox, use upload_task_attachment instead. Any project contributor or above can attach (VIEWERs cannot).
attach_file_from_url
Attach an external URL as a WorkspaceDocument inside a library. Zero bytes, just a metadata row. provider must be one of MIRO, FIGMA, NOTION, CONFLUENCE, GOOGLE_DOCS, EXCALIDRAW, OTHER_LINK. url must be http(s). Requires project.content.create on the parent library's project (Viewers are read-only).
attach_link
Computed variance of a project against one of its baselines: project finish slip (calendar days), an on-track / at-risk / behind rating, counts of delayed / on-time / ahead / added / removed tasks, and the worst slippers with their start, finish, planned-duration and started-late variance. Duration variance uses the stored planned duration, not the date span. Use get_baseline for the raw snapshot. Available on every plan.
compare_baseline
Bulk-approve all SUBMITTED timesheet entries for a specific user in a given week. Caller must be an eligible approver. Feature: timeTracking (PRO+).
approve_timesheet_week
Create up to 50 sibling tasks in one call at the project root, or under a sprint / epic. Single transaction (all-or-nothing). Use for "add these 10 tasks" rather than calling create_task N times; use add_subtasks when the new tasks should be children of an existing task. THIS TOOL DOES NOT SCHEDULE. Tasks land with NO dates unless you set startDate and dueDate on each one yourself, and there is no way to express durations or predecessors here at all. If you are holding a schedule (phase durations, effort estimates, "task 5 depends on task 3", a critical path), do NOT send it through this tool: it arrives as a flat dateless list, and the Gantt, timeline and critical path are all empty. Use instantiate_plan instead, which takes estimatedDays per task and computes real start and due dates from them. It accepts a projectId, so it works on a project that already exists. Neither tool accepts predecessors: create the tasks first, then add each dependency with link_dependency. The result includes `url` for the project (and one per task). ALWAYS show the project link in your reply so the user can open what you just created.
bulk_create_tasks
Bulk-reject all SUBMITTED timesheet entries for a specific user in a given week. Optionally provide a rejection reason. Feature: timeTracking (PRO+).
reject_timesheet_week
Apply the same partial update to many tasks at once. Pass taskIds (max 50) and any combination of: status (TODO/IN_PROGRESS/REVIEW/DONE/BLOCKED), priority (LOW/MEDIUM/HIGH/CRITICAL), shiftDueDateDays (positive or negative integer to add to each task's dueDate). Per-task failures are reported in `errors` but do not abort the whole call. Permission: task.edit.any on each task's project. PREFER bulk_update_status when the ONLY change is status (cheaper, atomic, single parent-rollup pass).
bulk_update_tasks
Full working-calendar detail with every exception (holidays, special working days). workDays is a 0..6 day-of-week array (0=Sun).
get_working_calendar
Caller's workflow-approval inbox (WorkflowApproval rows). Default status=PENDING (your queue). Pass approverId to inspect another user's queue (admins). PREFER decide_workflow_approval to act on a PENDING row. Plan gate: automations (PRO+).
list_workflow_approvals
Cancel an in-progress workflow run. Caller must be able to manage the workflow. Feature: automations (PRO+).
cancel_workflow_run
Capture a point-in-time baseline snapshot of a project (tasks, dates, progress, EVM). Caller must be a project Owner or Manager. Available on every plan.
capture_baseline
Capture an IDEA: an uncommitted, possibly half-formed thought. Use this instead of create_task when the thing is not agreed work yet. An idea has no assignee and no due date and never appears in anyone's task list, so capturing one costs the user nothing. It is PRIVATE to the capturing user until they share it or open it to the org (visibility is controlled in the web app). projectId is OPTIONAL: omit it for a "General" idea that is not tied to a project yet, which is the normal case when someone is just thinking out loud. Promote it later with promote_idea.
create_idea
Clone a workflow with fresh step IDs. PRO+ feature (automations). The copy starts inactive (isActive=false) and is named "<original> (Copy)". Returns the new workflow's id + name. Use this to template-then-tweak an existing workflow without disturbing the original. MUTATION: writes a new Workflow row. Permission: automation.manage on the workflow's project (or org MANAGER+ for org-wide workflows).
duplicate_workflow
Compose a draft meeting invite in the authorized user's calendar. Preview-only: the draft event lands in the user's calendar; the user reviews + sends manually from Outlook. Per-message external attendee cap: 10. Uses existing Calendars.ReadWrite scope.
compose_meeting_invite
Generate a structured meeting agenda for a project and deliver it to the Agent inbox for review. Pulls current in-progress work, open risks, and upcoming milestones from the project context and synthesises a ready-to-share agenda (goals, status, risks, decisions needed). Returns the artifact id and conversation id once the agenda is drafted. Plan gate: aiCore (every plan). Access: any project member.
compose_meeting_brief
Generate a concise weekly status report for a project and deliver it to the Agent inbox for review. Assembles the project context bundle and writes a structured status report (health, accomplishments, risks, next steps) into the Agent Deliverables library. Returns the artifact id and conversation id once the digest is drafted. Plan gate: aiCore (every plan). Access: any project member.
compose_status_digest
Generate a plain-language EVM narrative for a project and deliver it to the Agent inbox for review. Fetches BAC/EV/PV/AC/CPI/SPI/EAC and writes a PMO-quality prose document into the Agent Deliverables library. Returns the artifact id and conversation id once the narrative is drafted. Plan gate: aiCore (every plan). Access: project OWNER/MANAGER or org OWNER/ADMIN.
compose_evm_narrative
Generate structured release notes for a project from recently completed tasks, grouped by epic or theme, and deliver the draft to the Agent inbox for review. Output includes a summary, changes by area, known issues, and next planned work. Returns the artifact id and conversation id once the notes are drafted. Plan gate: aiCore (every plan). Access: any project member.
compose_release_notes
Weekly EVM time-series for one project. Each point carries the same metrics as `calculate_evm` (EV, PV, AC, CPI, SPI, EAC). Powers the S-Curve and trajectory analyses. Same access + plan gate as `calculate_evm`.
calculate_evm_history
Compute the critical path for a project and return a prose summary. Returns the ordered list of critical-task IDs, the bottleneck task, the project end date, total duration in days, and a 2-3 sentence explanation of the chain. The critical-path calculation is deterministic (no LLM); the prose falls back to a template when the AI provider is unavailable. No plan gate. Use before planning sessions or when the user asks "what is on the critical path" or "which task is the bottleneck?"
critical_path_narrative
Earned Value Management report for one project as of a given date (default: now). Returns BAC, EV, PV, AC, CPI, SPI, EAC, ETC, plus EV/PV/AC in revenue currency when the org has billable rates. PREFER `calculate_evm_history` for time-series. Access: callers who may read the project cost: org OWNER/ADMIN, or budget.read at their project role (by default project OWNER and MANAGER). Plan gate: aiAdvanced.
calculate_evm
Create a DRAFT change request on a project (scope, schedule, budget, resource or other change). Requires project membership. Feature: changeControl (ENTERPRISE+).
create_change_request
Create a DRAFT governance proposal for review through the pipeline (DRAFT to APPROVED/REJECTED). Feature: governance (ENTERPRISE+).
create_proposal
Create a blank, editable Office document (Word .docx, Excel .xlsx, or PowerPoint .pptx) in a workspace document library. The file appears in the Documents tab and a person can open it in the in-browser Office editor to co-edit it. Use this (not draft_document, which only makes markdown) when the deliverable should be a real Office file the team will edit. kind is one of word | cell | slide (aliases: document/docx, spreadsheet/xlsx, presentation/pptx). libraryId must reference an existing library; create one first via create_library if needed. Requires project.content.create (CONTRIBUTOR+; Viewers are read-only).
create_office_document
Create a custom field definition (PRO+ feature). fieldType: one of TEXT, TEXTAREA, NUMBER, DATE, DROPDOWN, MULTI_SELECT, CHECKBOX, URL, EMAIL, PHONE, CURRENCY, RATING. entityType: PROJECT, TASK, or PROPOSAL. DROPDOWN/MULTI_SELECT require at least one option. Omit projectId for an org-wide field (admin/manager only). Set projectId to scope the field to one project (project owner/manager allowed).
create_custom_field_def
Create a draft email in the authorized user's Outlook mailbox. Draft-only: it saves a draft and returns its id for the user to review and send themselves from Outlook — it never transmits. Recipients are optional (the human can fill them in when reviewing). Per-message external recipient cap: 10. The draft is owned by the connected user, not the agent.
send_outlook_message
Turn a structured project plan into real Tasks + Epics + Risks. By default it CREATES A NEW PROJECT for the plan. Pass `projectId` to add the plan to a project that ALREADY EXISTS instead. Because it creates a project by default, calling create_project first and then this tool WITHOUT projectId produces two projects, one of them empty. When a project already exists, whether just created or named by the user, its id belongs in `projectId`. Attaching appends only: it never renames the project, never changes its owner, and never reschedules tasks that were already there. The plan JSON shape matches the /api/ai/intake response (projectTitle, scopeSummary, tasks[], estimatedStart, estimatedEnd, risks[]). On the create path the caller becomes project owner; attaching leaves the existing owner alone. A task the plan does not name an assignee for goes to the person the call is made for, not to the agent persona, so generating a plan does not put its tasks in the agent work queue that list_assigned_tasks reads. §agent-layer C1 (2026-05-25): optionally declare epics[] with caller-defined refs and bind tasks to them via task.epicRef. Useful when the agent has a thematic breakdown ("Auth", "Onboarding", "Billing") rather than a single flat list. When epics is omitted, every task lands in the default "Initial Scope" epic (legacy behaviour). Intended for a plan that has already been refined. UNDO SEMANTICS DIFFER BY PATH, and the difference is destructive: a project this call CREATED is fully reversed by delete_project, because nothing else is in it. A project this call ATTACHED to is not, because delete_project destroys the pre-existing project and everything that was already in it, not just what this call added; on that path only the individual tasks this call created are safely removable. `createdProject` in the result distinguishes the two. Limits: up to 20 epics and 100 tasks per call (each task may carry subtasks[]); split a larger plan across calls or extend it afterward with bulk_create_tasks / add_subtasks. The result includes `url`, a direct link to the project in Onplana, and `createdProject`, false when the plan was added to a project that already existed (say "I added it to your project", not "I created a project"). ALWAYS show that link in your reply: the user is working inside another app and has no other way to find the plan you just built.
instantiate_plan
Create a goal / objective / OKR in the caller's org. `title` is required. Optional: description, type (OBJECTIVE / KEY_RESULT / INITIATIVE, default OBJECTIVE), parentId (existing goal to nest under), projectIds (array of project ids to link), startDate + dueDate (ISO). Caller becomes the owner. Use `create_key_result` to add measurable KRs to the new goal once it exists.
create_goal
Attach a measurable Key Result to an existing goal. Required: goalId, title, targetValue (number > 0). Optional: unit (default "%"), startValue (default 0), rollupMethod (TASK_COUNT or TASK_PERCENTAGE, leave unset for manual updates via `update_key_result_value`). Caller must own the parent goal or have the org.project.view.all permission.
create_key_result
Create a portfolio (BUSINESS+ feature). The caller becomes the portfolio owner. Requires org.portfolio.manage (default Manager+).
create_portfolio
Create a document library. Specify exactly one scope: projectId, proposalId, or scope="org" for a tenant-level (organization) library. name is 1..200 chars; optional description. Project libraries require project.content.create (Viewers are read-only); org libraries require org.library.manage (MANAGER+ by default). Agent-created libraries are always user-visible, never the system's auto-stash variant.
create_library
Create a new project from a template (STARTER+ feature). Provide the template id, a project name, and a start date (YYYY-MM-DD). The caller automatically becomes the project owner.
instantiate_template
File a new Issue (PMBOK Issue Log: a problem that has already happened and needs triage). Use this - NOT create_task - for bugs, blockers, and materialized problems. projectId is OPTIONAL: omit it to file an organization-level ("General") issue when you do not know which project it belongs to. type: OPERATIONAL/TECHNICAL/SCHEDULE/RESOURCE/BUDGET/SCOPE/QUALITY/EXTERNAL/OTHER. severity: LOW/MEDIUM/HIGH/CRITICAL. Optionally link a materializing risk, a fix-task, or a change request. Starts in OPEN.
create_issue
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Onplana alternatives on ChatGPT?
As of 2026-09-28, Onplana competes with Adobe Workfront, Agiflow, AIOProductOS, Aphex, Asana, Atlassian Rovo (Legacy), Atoll, awork, BasicOps, Breeze, CampusThreads, Cinch, ClickUp, Constructable, COR, Fenra, flow - AI Collaboration tool, Frasma, GetItDone, Hive, Jaggle, JobTread, Linear, monday.com, MotionHub, Namp, Nifty, Olie Flow AI, Orchetta, Plane, Plate, Project Kickoff Pack, Project Plan 365, Riido, Runrun.it, Simply-Useful, SmartFlow Portal, Smartsheet AU, Smartsheet EU, Smartsheet US, Sonjapgo, TaskView, Trello, Voarq, Weft, Wrike in ChatGPT Project & Task Management Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.