Skip to content

feat(manageengine): add ManageEngine ServiceDesk Plus Cloud integration - #7447

Open
waleedlatif1 wants to merge 3 commits into
stagingfrom
feat/manageengine-integration
Open

feat(manageengine): add ManageEngine ServiceDesk Plus Cloud integration#7447
waleedlatif1 wants to merge 3 commits into
stagingfrom
feat/manageengine-integration

Conversation

@waleedlatif1

Copy link
Copy Markdown
Collaborator

Summary

  • Adds a ManageEngine ServiceDesk Plus Cloud integration: 31 tools across requests, problems, changes, assets, and knowledge base solutions, with full create/read/list/update/delete on each plus notes on requests, problems, and changes
  • Reuses the existing Zoho OAuth client — ServiceDesk Plus authenticates through Zoho, and scopes are chosen per authorization request rather than per registered client, so manageengine-sdp aliases onto the zoho-desk deployment capability and needs no new env pair
  • Data center is a closed dropdown mapping to the 10 documented hosts rather than a user-supplied base URL, so the set of hosts that can ever receive the access token is fixed at build time
  • Every output field and endpoint was verified against the published v3 API docs; nothing is inferred

Notes

  • Connecting requires a Zoho account in the US data center. The authorize and token-exchange legs are pinned to accounts.zoho.com and a Zoho token is only valid in the data center that issued it. This matches the existing Zoho Desk connector's limitation and is stated in the block, the OAuth service description, and the docs page. Making it multi-DC means reading the accounts-server callback param — a connector-level change that would fix Zoho Desk at the same time, so it is deliberately out of scope here.
  • The standalone Tasks module is not implemented. Its endpoints are documented but the scope table publishes no tasks entry, and requesting an unverified scope would put it on every user's consent screen.
  • Lookup fields (status, priority, category, technician, group, topic, product) are addressed by name or email because they are portal-defined and renameable — a fixed option list would lock out any portal that customized its values.
  • Updates omit fields left empty rather than sending null, so changing a status never clears the technician or category. Emergency Change and Visible to Requesters are tri-state dropdowns on their update operations because a switch cannot express "leave unchanged" — as a switch they silently downgraded an emergency change and unpublished a live KB article.
  • Icon is the official brand mark; bgColor is white.

Type of Change

  • New feature (non-breaking change which adds functionality)

Testing

Tested manually. 45/45 audits pass (check:audits), plus docs-manifest:check, check-block-registry, lint, and type-check clean. 336 tests pass, including 40 new unit tests covering the request/response helpers, entity builders, and block param scoping. Verified the new tests fail without their fixes by reverting each and watching them go red.

Additionally verified programmatically: all 31 endpoints match the documented path, method, auth and content-negotiation headers, and body shape; every declared output field appears in a real doc response sample (zero invented fields); every operation supplies its required params and leaks no other module's values, including with stale cross-operation state populated.

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

🤖 Generated with Claude Code

https://claude.ai/code/session_01HbUGaP3XyrSm3Lk3k959j2

31 tools across requests, problems, changes, assets, and knowledge base
solutions, with full create/read/list/update/delete on each plus notes on
requests, problems, and changes.

Auth reuses the existing Zoho OAuth client: ServiceDesk Plus authenticates
through Zoho and scopes are chosen per authorization request rather than per
registered client, so manageengine-sdp aliases onto the zoho-desk deployment
capability and needs no new env pair. Connecting requires a Zoho account in
the US data center, matching the existing Zoho connector's limitation.

The standalone Tasks module is deliberately not implemented: its endpoints
are documented but the scope table publishes no tasks entry.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbUGaP3XyrSm3Lk3k959j2
@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 3, 2026 9:05pm UTC

Request Review

@greptile-apps

greptile-apps Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a ManageEngine ServiceDesk Plus Cloud integration using the existing Zoho OAuth deployment capability.

  • Registers 31 operations covering requests, problems, changes, assets, solutions, and notes.
  • Adds shared endpoint, request-building, response-parsing, and data-center utilities with unit tests.
  • Adds block configuration, generated tool metadata, documentation, icons, and deployment registration.
  • Adds provider-specific OAuth scopes while reusing the configured Zoho client credentials.

Confidence Score: 5/5

The PR appears safe to merge because no blocking failure remains in the eligible follow-up review scope.

No blocking failure remains.

Important Files Changed

Filename Overview
apps/sim/blocks/blocks/manageengine-sdp.ts Defines the integration block, operation-specific parameters, and stale-state filtering for all 31 operations.
apps/sim/tools/manageengine_sdp/utils.ts Implements bounded endpoint construction, request serialization, list options, and ServiceDesk response handling.
apps/sim/tools/manageengine_sdp/entity-builders.ts Builds module-specific create and update entities while preserving explicit boolean values and omitting unset fields.
apps/sim/lib/auth/connectors/providers.ts Registers the ManageEngine connector with ServiceDesk-specific Zoho OAuth scopes and profile resolution.
apps/sim/lib/oauth/oauth.ts Adds ManageEngine OAuth configuration backed by the existing Zoho client credentials and token endpoint.
packages/deployment-config/src/env-capabilities.ts Aliases ManageEngine deployment availability to the existing Zoho Desk OAuth capability.
apps/sim/tools/manageengine_sdp/utils.test.ts Covers endpoint safety, request formatting, paging behavior, and response success and failure handling.
apps/sim/blocks/blocks/manageengine-sdp.test.ts Verifies operation parameter scoping and prevents unrelated persisted block state from reaching tools.

Sequence Diagram

sequenceDiagram
  participant User
  participant Sim as Sim Workflow
  participant OAuth as Zoho OAuth
  participant SDP as ServiceDesk Plus Cloud
  User->>Sim: Connect ManageEngine credential
  Sim->>OAuth: Authorize with SDPOnDemand scopes
  OAuth-->>Sim: Access and refresh tokens
  User->>Sim: Run ManageEngine operation
  Sim->>SDP: v3 API request for selected data center and portal
  SDP-->>Sim: Entity or list response
  Sim-->>User: Structured tool output
Loading

Reviews (3): Last reviewed commit: "fix(manageengine): reject JSON-array res..." | Re-trigger Greptile

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 60 files

Re-trigger cubic

Comment thread apps/sim/tools/manageengine_sdp/types.ts
Comment thread apps/docs/content/docs/integrations/manageengine_sdp.mdx Outdated
Comment thread apps/sim/tools/manageengine_sdp/utils.ts Outdated
Comment thread packages/deployment-config/src/integrations.json Outdated
Comment thread apps/sim/tools/manageengine_sdp/utils.test.ts
- display_id on problems, changes and solutions reused the timestamp property
  map, so generated metadata described a record number like "140" as epoch
  milliseconds. Give it its own map.
- parseSdpResponse turned a non-empty, non-JSON 2xx body into {} and reported
  success — a proxy or login page answering 200 with HTML would make a read look
  empty and a delete look like it worked. Throw instead; an empty body is still
  tolerated.
- Scope the docs setup step: connect a Zoho account, with client registration
  called out as self-hosted only.
- The block described notes on "any ITSM record"; only requests, problems and
  changes have note endpoints here.
- Assert all ten data-center hosts, not four, and guard the count so a new code
  fails the test until asserted.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbUGaP3XyrSm3Lk3k959j2
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cubic-dev-ai review this PR

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this PR

@waleedlatif1 I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 60 files

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread apps/sim/tools/manageengine_sdp/utils.ts Outdated
Comment thread apps/sim/tools/manageengine_sdp/types.ts
Comment thread apps/docs/content/docs/integrations/manageengine_sdp.mdx Outdated
A 2xx body that parses to an array passed the `typeof 'object'` check, so it
was accepted as a v3 envelope. It carries no `response_status`, so a list read
as empty and a delete reported success. Reject arrays and `null` alongside the
scalar case already handled.

Also name the display_id children in its description — the docs generator
renders one level of output nesting repo-wide, so the shape is otherwise
invisible on the page.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HbUGaP3XyrSm3Lk3k959j2
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cubic-dev-ai review this PR

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this PR

@waleedlatif1 I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 60 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant