Skip to content

feat: Add administrative tools for user, group, content, and site management #305

Open
allisonbierschenk wants to merge 3 commits into
tableau:mainfrom
allisonbierschenk:contrib-admin-tools
Open

feat: Add administrative tools for user, group, content, and site management #305
allisonbierschenk wants to merge 3 commits into
tableau:mainfrom
allisonbierschenk:contrib-admin-tools

Conversation

@allisonbierschenk

@allisonbierschenk allisonbierschenk commented Apr 14, 2026

Copy link
Copy Markdown

IMPORTANT: Please do not create a Pull Request without creating an issue first.

Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of
the pull request.

Pull Request Template

Description

This PR adds 8 new administrative tools for managing Tableau users, groups, content, permissions, and site operations. All tools are
organized under src/tools/admin/ with corresponding API methods, tests, and documentation.

New Tools

User & Group Administration:

  • admin-users - User lifecycle management (create, update, delete, query), CSV import/export, and OAuth credential management
  • admin-groups - Group and group set management with membership operations

Content Management:

  • content-projects - Create, update, delete, and query projects with filtering and pagination
  • content-workbooks - Query, update, delete, and download workbooks for site or specific users
  • content-views - Query views and export data in multiple formats (CSV, image, PDF, Excel)

Permissions & Operations:

  • content-permissions - Manage granular and default permissions for datasources, projects, views, workbooks, and other content
    types
  • site-jobs - Query and cancel background jobs on the site
  • tableau-operations - Advanced operations including job conflict detection, effective permissions analysis, stale content
    reports, lineage impact analysis, and workbook archiving

New Tool Groups:

Adds three tool groups for the new tools:

  • admin - admin-users, admin-groups
  • content - content-projects, content-workbooks, content-views
  • operations - content-permissions, site-jobs, tableau-operations

Motivation and Context

Tableau administrators need programmatic access to administrative functions beyond data querying and content exploration. These
tools enable:

  • User and group lifecycle management
  • Project and content governance
  • Permission management across content types
  • Operational monitoring and job management

Customers like Walmart, IAS (Integrated Ad Science), & Amplitude have expressed a need for this.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update
  • Other (please describe):

How Has This Been Tested?

  • Manually tested

Unit Tests:

  • 1009 tests passing across 68 test files
  • 35 new unit tests for admin tools with mocked REST API calls
  • Tests cover tool initialization, all operations, parameter passing, and error conditions
  • Mock patterns follow existing tool test structure (workbooks, views, datasources)

Admin-Users Tool (16 tests):

  • All 10 operations tested: add-user, remove-user, update-user, query-user, get-users, get-groups-for-user, CSV import/export, OAuth
    credentials
  • Parameter validation, pagination, filtering, sorting
  • Body content and optional parameters

Admin-Groups Tool (9 tests):

  • Group CRUD operations, membership management, group sets
  • Pagination and filtering

Other Admin Tools (10 tests):

  • Basic operation testing for content-projects, content-workbooks, content-views, site-jobs, content-permissions, tableau-operations

Integration Testing:

  • ⚠️ NOT tested against live Tableau instance (requires admin OAuth scopes and configured environment)
  • Tool registration, schema validation, and factory patterns verified
  • All code compiles with TypeScript, no linting errors

Backward Compatibility:

  • All 974 existing tests continue to pass
  • All 17 original tools intact and working

Related Issues

NA

Checklist

  • I have updated the version in the package.json file by using npm run version. For example,
    use npm run version:patch for a patch version bump.
  • I have made any necessary changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • I have documented any breaking changes in the PR description. For example, renaming a config
    environment variable or changing its default value.

Contributor Agreement

By submitting this pull request, I confirm that:

…port

Reorganizes all MCP admin tools under src/tools/admin/ structure:
- admin/users/: User lifecycle, OAuth credentials, CSV bulk operations
- admin/groups/: Group/group set management, membership operations
- admin/content/: Projects, workbooks, views operations
- admin/jobs/: Background job monitoring
- admin/operations/: Job conflict detection, workbook archiving
- admin/permissions/: Content permission management

Adds three tool groups (admin, content, operations) that work with
INCLUDE_TOOLS and EXCLUDE_TOOLS environment variables for granular
access control. Tools can be filtered by individual name or group name.
… Projects, workbooks, views operations

jobs/: Background job monitoring
operations/: Job conflict detection, workbook archiving
permissions/: Content permission management

Adds tool groups that work with INCLUDE_TOOLS and EXCLUDE_TOOLS environment variables for granular access control. Tools can be filtered by individual name or group name.

New tools support comprehensive site administration and content management operations through organized, scoped interfaces.
@mattcfilbert

mattcfilbert commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

@allisonbierschenk — 🤖 MattGPT (Matt Filbert's agent)

Big, useful addition (8 admin tools).

Highest-risk gap: since these are LLM-invokable, several destructive operations execute immediately with no dry-run or confirmation:

  • delete-group
  • delete-project
  • remove-user-from-site
  • replace-*-permissions (atomic ACL replace, no backup/rollback)

By contrast, kill-job-by-priority already defaults to dry-run. A hallucinated or mistyped ID on any of the above is destructive.

Suggestions:

  • Add a dry-run / confirm guard on the destructive ops (matching the kill-job pattern).
  • Add at least one integration test on a create → delete flow.

(Inline notes on the specific spots.)

'add-user-to-group',
'create-group',
'create-group-set',
'delete-group',

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.

🤖 MattGPT (Matt Filbert's agent)

delete-group runs immediately — no dry-run, no confirmation. Since this tool is LLM-invokable, a hallucinated or mistyped groupId deletes the group outright.

Suggest matching the kill-job-by-priority pattern: default to a dry-run, or require an explicit confirm flag.

'upload-user-credentials': ['tableau:oauth_credentials:upload'],
};

const paramsSchema = {

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.

🤖 MattGPT (Matt Filbert's agent)

remove-user-from-site runs immediately and can reassign the user's content — with no confirmation step.

Suggest a dry-run/confirm guard here, consistent with the other destructive tools.

'delete-project': ['tableau:content:delete'],
};

const paramsSchema = {

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.

🤖 MattGPT (Matt Filbert's agent)

delete-project runs immediately. Projects can contain workbooks, datasources, and nested projects, so the blast radius is large.

Suggest a dry-run, or an explicit deleteChildren acknowledgement before cascading.

'replace-content-permissions': ['tableau:permissions:update'],
};

const paramsSchema = {

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.

🤖 MattGPT (Matt Filbert's agent)

replace-content-permissions atomically replaces the ACL — no backup, rollback, or dry-run. A wrong payload can lock content out entirely.

Suggest a dry-run that previews the resulting grants before applying.

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.

2 participants