Cloud Storage
SharePoint
API integration
Ship Cloud Storage features without building the integration. Full SharePoint API access via Proxy, normalized data through Unified APIs, and 90+ MCP-ready tools for AI agents — all extensible to your exact use case.
Talk to usUse Cases
Why integrate with SharePoint
Common scenarios for SaaS companies building SharePoint integrations for their customers.
Power AI search and retrieval across customer SharePoint environments
SaaS companies building AI copilots or enterprise search products can ingest SharePoint pages, wiki content, and documents to build knowledge graphs. Truto's Unified Knowledge Base and Search APIs handle the complexity of traversing sites, drives, and page content while respecting permission boundaries.
Offer 'Bring Your Own Storage' with SharePoint as the destination
CLM platforms, HR tools, and project management apps can push generated files — contracts, invoices, onboarding packets — directly into a customer's SharePoint drives. This lets enterprise customers maintain data sovereignty without leaving the SaaS product.
Sync workspace structures between your app and SharePoint
When a SaaS app creates a new project, deal, or client record, it can automatically provision matching folders and directory structures in SharePoint. This keeps the SaaS app and the customer's file organization in lockstep without manual effort.
Build a native SharePoint file picker into your product
SaaS apps can let end users browse their SharePoint sites, drives, and folders directly within the product UI to attach, link, or import files. Truto's tools for listing sites and drives plus the Unified File Storage API make this straightforward to implement.
Enforce permission-aware document access in third-party apps
When surfacing SharePoint content inside a SaaS product, companies need to ensure users only see what they're authorized to see in SharePoint. The Unified File Storage API exposes permission data so apps can replicate access controls faithfully.
What You Can Build
Ship these features with Truto + SharePoint
Concrete product features your team can ship faster by leveraging Truto’s SharePoint integration instead of building from scratch.
Embedded SharePoint file picker
Let users browse SharePoint sites and drives using list_all_sharepoint_sites and list_all_sharepoint_drives, then select specific files or folders to link into your app.
Automated deal room provisioning
When a deal closes or a project kicks off, automatically create a structured folder hierarchy in the customer's SharePoint drive with template documents pre-loaded.
Permission-aware document search
Index SharePoint pages and drive items via the Unified Search API and Unified Knowledge Base API, then filter results at query time using SharePoint permission data from the Unified File Storage API.
Bi-directional document sync engine
Continuously watch SharePoint drives for updated files and sync the latest versions into your platform, or push app-generated documents back into the correct SharePoint drive.
SharePoint wiki and intranet ingestion pipeline
Crawl SharePoint Spaces and Pages via the Unified Knowledge Base API to extract page content for feeding RAG pipelines, internal search indexes, or knowledge management features.
User directory sync from SharePoint workspaces
Pull user identities and workspace membership via the Unified User Directory API to auto-map permissions, pre-populate user profiles, or trigger onboarding workflows in your product.
SuperAI
SharePoint AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
list_all_share_point_sites
List all available SharePoint sites in an organization. Returns: id, createdDateTime, description, displayName, eTag, isPersonalSite, lastModifiedDateTime, name, root, sharepointIds, siteCollection, webUrl.
get_single_share_point_site_by_id
Get a single SharePoint site by its id. Returns: id, createdDateTime, description, displayName, isPersonalSite, lastModifiedDateTime, name, sharepointIds, siteCollection, webUrl, 2XX. Required: id.
share_point_sites_using_path
Get a SharePoint site by its hostname and server-relative URL path. Returns: id, createdDateTime, description, displayName, isPersonalSite, lastModifiedDateTime, name, sharepointIds, siteCollection, webUrl. Required: hostname, server_relative_path.
list_all_share_point_base_site_pages
List SharePoint site pages (baseSitePage objects) from the site pages list in a site. Returns: id, name, createdDateTime, lastModifiedDateTime, webUrl. Results are sorted alphabetically by name in ascending order and returned with pagination. Required: site_id.
get_single_share_point_base_site_page_by_id
Get metadata for a specific SharePoint base site page by its id within a site. Returns: id, name, createdDateTime, lastModifiedDateTime, webUrl, eTag. Required: site_id, id.
list_all_share_point_site_pages
List the modern site pages on a SharePoint site. The microsoft.graph.sitePage cast in the path filters the pages collection to site pages specifically. Returns id, name, title, pageLayout, promotionKind, webUrl and publishingState. Required: site_id.
get_single_share_point_site_page_by_id
Get one modern site page by id. Pass $expand=canvasLayout to include the page content structure and its web parts. Required: site_id, id.
create_a_share_point_site_page
Create a modern page on a SharePoint site. "@odata.type" must be "#microsoft.graph.sitePage" and "name" must end in .aspx. The page is created as a DRAFT and is not visible to site visitors until you call site-pages.publish. Required: site_id, @odata.type, name.
update_a_share_point_site_page_by_id
Update a modern site page - title, layout, comment settings or canvasLayout content. Editing a published page creates a new draft version; call site-pages.publish to make the change live. Required: site_id, id.
share_point_site_pages_publish
Publish a modern site page, making the current draft visible to site visitors. Takes no body. A newly created or edited page stays in draft until this is called. Returns an empty 204 on success. Required: site_id, id.
share_point_site_pages_create_from_template
Create a site page from an existing page template. BETA endpoint - Microsoft may change it without notice, so prefer site-pages.create for stable work. The new page is a draft until published. Required: site_id. PREREQUISITE: the site must already hold at least one page template, otherwise this returns 404. Templates are created in the SharePoint page editor (Save as template); none exist in a fresh site.
delete_a_share_point_site_page_by_id
Delete a site page. Note the path has no microsoft.graph.sitePage cast - deletion is done on the base pages collection. Returns an empty 204 on success. Required: site_id, id.
list_all_share_point_horizontal_sections
List horizontal sections from the canvas layout of a SharePoint site page. Returns: id, columns, isPersonalSite, displayName, name, createdDateTime, lastModifiedDateTime, webUrl. Required: site_id, page_id.
create_a_share_point_horizontal_section
Add a horizontal section to a SharePoint page canvas layout. The body needs an id (the section position, as a string, e.g. "1"), plus layout and emphasis - a body without id fails with 400 "Empty Payload. JSON content expected." or "One of the provided arguments is not acceptable." Sections are the rows of a modern page; web parts are placed inside them afterwards. Verified working with {"id":"9","layout":"oneColumn","emphasis":"none"}. Required: site_id, page_id, id.
list_all_share_point_web_parts
List web parts on a SharePoint site page. Returns each web part with id, @odata.type, webPartType, data, and innerHtml. Required: site_id, page_id.
share_point_web_parts_create_vertical
Create a new web part in the vertical section of a SharePoint page's canvas layout. Returns the created web part with id, @odata.type, webPartType, data, and innerHtml. Required: site_id, page_id. PREREQUISITE: the page canvas must already contain a vertical section, otherwise this returns 404. No method in this integration creates one - add it in the SharePoint page editor first. For the ordinary case use web-parts.create-horizontal, which works against the horizontal sections that new pages have by default.
share_point_web_parts_create_horizontal
Create a new web part in a specific column of a horizontal section on a SharePoint site page. Returns: id, @odata.type.type. Required: site_id, page_id, horizontal_section_id, horizontal_section_column_id.
share_point_web_parts_download
Download binary content referenced by a web part, by pre-authenticated URL. Like drive-items.download this takes no ids: pass base as the URL origin and path as the pathname plus query string, both taken from the pre-authenticated URL in the web part payload (typically a driveItem @microsoft.graph.downloadUrl). Anything else returns 500 "Invalid URL string". Required: base, path.
list_all_share_point_drives
List drives (document libraries) under a SharePoint site. Returns: id, name, createdDateTime, description, eTag, lastModifiedDateTime, webUrl. Required: site_id.
list_all_share_point_drive_items
List the CHILDREN of a folder in a document library, with listItem expanded. Despite the resource name this is a folder listing, not a flat item list: item_id must be a FOLDER id, and passing a file id returns 422 "Children cannot be listed from an item that is not a folder". item_id defaults to "root", so omit it to list the library root. Required: site_id, drive_id.
get_single_share_point_drive_item_by_id
Get a driveItem from a site's DEFAULT document library. The path resolves /sites/{site_id}/drive, so the id must be a driveItem id from that default drive - passing a site id, a list id or an item from a different drive returns 400 "The provided drive id appears to be malformed, or does not exist". To read an item from a specific (non-default) drive, use drive-items-v2.get with drive_id instead. Required: site_id, id.
share_point_drive_items_download
Download a driveItem's binary content by pre-authenticated URL. This tool does not take a drive or item id: it takes the download URL, split in two. Read the item first (drive-items-v2.get) to obtain its "@microsoft.graph.downloadUrl", then pass base as that URL's origin (e.g. https://contoso.sharepoint.com) and path as its pathname plus query string. Passing anything else returns 500 "Invalid URL string". Verified working when split from a live downloadUrl. Required: base, path.
delete_a_share_point_drive_item_by_id
Delete a SharePoint drive item by id. Returns an empty 204 response on success. Required: drive_id, id.
list_all_share_point_search
Run a Microsoft Search query across SharePoint content. This is a POST that requires a body: {"requests":[{"entityTypes":["driveItem"],"query":{"queryString":"..."}}]}. An empty or malformed body returns 500 "Value cannot be null. (Parameter 'source')". Note also that Microsoft Search is permission-gated - raw POST /v1.0/search/query returns 400 "The call failed, please try again." on a connection without search entitlement, independent of the body, so a correct request can still fail on tenant configuration. Required: requests.
list_all_share_point_lists
List all SharePoint lists on a site. Returns each list's id, displayName, description, webUrl and its list facet (template, hidden, contentTypesEnabled). Use the returned id as list_id for list-items and list-columns. Required: site_id.
get_single_share_point_list_by_id
Get one SharePoint list by id, including its template and settings. Required: site_id, id.
create_a_share_point_list
Create a new SharePoint list on a site. displayName is required; set list.template to choose the type ("genericList" for a normal list, "documentLibrary" for a library). You may define columns inline in the same call. Required: site_id, displayName.
create_a_share_point_list_column
Add a column to a SharePoint list. "name" is required and becomes the key used in list item fields. Declare the column type by setting exactly one type facet - text, number, boolean, dateTime, choice, currency, lookup, personOrGroup, hyperlinkOrPicture, geolocation or term - to an object (an empty object accepts the defaults). Required: site_id, list_id, name.
list_all_share_point_list_columns
List the column definitions of a SharePoint list. Call this before reading or writing list-items: each column's "name" is the exact key to use in a list item's fields object, and "required"/"readOnly" tell you which keys you must or must not send. Required: site_id, list_id.
get_single_share_point_list_column_by_id
Get a single column definition from a SharePoint list, including its type facet and validation rules. Required: site_id, list_id, id.
update_a_share_point_list_column_by_id
Update a column definition on a SharePoint list. Send only the properties you want to change. The column type facet generally cannot be changed after creation; displayName, description, required, indexed, hidden and defaultValue can. Required: site_id, list_id, id.
delete_a_share_point_list_column_by_id
Delete a column from a SharePoint list. This permanently removes the column and its values from every item in the list. Columns with isDeletable false cannot be removed. Returns an empty 204 on success. Required: site_id, list_id, id.
list_all_share_point_list_items
List the items in a SharePoint list. Column values are NOT returned by default - pass $expand=fields to include them, optionally narrowed with $expand=fields($select=Name,Status). Discover the available field names with list-columns.list. Required: site_id, list_id.
get_single_share_point_list_item_by_id
Get one item from a SharePoint list. Pass $expand=fields to include the column values. The id is the item's numeric id within the list (e.g. "1"), not a GUID. Required: site_id, list_id, id.
create_a_share_point_list_item
Create an item in a SharePoint list. The body must be {"fields": { ... }} where the keys are column names from list-columns.list - call that first to learn the names and which are required. "Title" is the default column on a generic list. Required: site_id, list_id, fields.
update_a_share_point_list_item_by_id
Update the column values of a SharePoint list item. This targets the item's fields resource, so the body is the bare fieldValueSet - name/value pairs at the top level, NOT wrapped in a "fields" object (that is only for create). Send only the columns you want to change. Returns the updated fieldValueSet. Required: site_id, list_id, id.
delete_a_share_point_list_item_by_id
Delete an item from a SharePoint list. The item goes to the site recycle bin. Returns an empty 204 on success. Required: site_id, list_id, id.
list_all_share_point_site_permissions
List permissions. Required: site_id.
create_a_share_point_site_permission
Create permission. Required: site_id.
create_a_share_point_list_item_permission
Create new navigation property to permissions for sites. Required: site_id, list_id, item_id.
list_all_share_point_site_members
List user profile items from the User Information List in a SharePoint site, with field values expanded. Returns: id, createdDateTime, eTag, lastModifiedDateTime, name, webUrl, fields. Required: site_id.
list_all_share_point_sub_sites
List the collection of subsites defined under a parent SharePoint site. Returns: id, displayName, name, createdDateTime, lastModifiedDateTime, webUrl, isPersonalSite. Required: site_id.
list_all_share_point_organization
List organizations (tenant details) in SharePoint via Microsoft Graph. Returns: id, displayName, businessPhones, preferredLanguage, createdDateTime.
share_point_drive_item_export_download
Download the content of a specific drive item in SharePoint, optionally converting it to a specified format. Returns the file content as a binary stream. Required: site_id, drive_id, item_id, format.
list_all_share_point_drive_item_permissions
List permissions for a SharePoint drive item. Returns each permission object including its id and resource-type-specific attributes from the microsoft.graph.permission schema. Required: drive_id, item_id.
update_a_share_point_drive_item_permission_by_id
Update a sharing permission on a SharePoint drive item. Returns the updated permission including id, roles, grantedTo, and link. ONLY DIRECT PERMISSIONS ARE PATCHABLE: a driveItem's default permissions are inherited from the site's SharePoint groups (Owners / Members / Visitors) and Graph rejects a PATCH on those with 403 Access denied - this is by design, not a request defect. Use drive-item-permissions.list first and target a permission that carries a link object or was granted directly to a user; change site-group membership in SharePoint itself. The body replaces roles wholesale: send ["read"] for view-only or ["write"] for edit. Required: drive_id, item_id, id.
delete_a_share_point_drive_item_permission_by_id
Delete a sharing permission from a SharePoint drive item. Returns an empty 204 response on success. Required: drive_id, item_id, id.
get_single_share_point_drive_item_permission_by_id
Get a specific permission on a SharePoint drive item by id. Returns: id, attributes. Required: drive_id, item_id, id.
share_point_drive_item_invite_send
Send a sharing invitation for a SharePoint drive item to specified recipients, optionally including a custom message and role assignments. Returns a collection of permissions including value (array of permission objects with id, roles, and grantedTo). Required: drive_id, item_id. TENANT GATE: external and link-based sharing must be enabled for the tenant and the library. Where it is not, Graph returns 400 even for a well-formed body - verified with sendInvitation false, so no mail was emitted. Check the SharePoint admin sharing policy before treating a 400 here as a request defect.
list_all_share_point_role_assignments
List the users in a SharePoint site group, via the SharePoint REST API rather than Graph. The identifiers are SharePoint-specific: site_name is the site path segment (for example "Notion" from /sites/Notion) and group_id is the NUMERIC SharePoint site-group id from /_api/web/sitegroups - NOT an Entra group GUID. Note also that /_api/ is the SharePoint REST surface and the connection Graph OAuth token is not accepted there, so this returns 401 on a Graph-only connection regardless of the identifiers. Required: site_name, group_id.
list_all_share_point_get_all_sites
List every SharePoint site in the tenant. IMPORTANT: /sites/getAllSites requires the Sites.Read.All APPLICATION permission and an app-only token - a delegated (user) connection returns 403 Access denied no matter which site permissions the user holds. To enumerate sites with a delegated connection use sites.list or get the root site with root-site.list and walk sub-sites.list instead. Takes no parameters.
list_all_share_point_list_sites
List all available SharePoint sites in an organization. Supports $search to find sites matching given keywords, plus $filter, $count, $orderby, $select, and $expand query options; for listing sites across all geographies use getAllSites instead. Returns: id, displayName, name, webUrl, createdDateTime, lastModifiedDateTime, isPersonalSite, description, eTag, root, sharepointIds, siteCollection.
list_all_share_point_group_members
List members of a group in SharePoint. Returns: id, businessPhones, displayName, givenName, jobTitle, mail, mobilePhone, officeLocation, preferredLanguage, surname, userPrincipalName. Required: group_id.
list_all_share_point_groups
List the Microsoft 365 groups in the tenant. Takes NO required parameters - call it bare. Earlier versions of this tool declared site_id, store_id, site-id, store-id and group-id as required; none of them appear in the request path, so Graph rejected the call with 400 "Unrecognized query argument specified". Verified returning 19 groups with no parameters at all. Use $select/$filter/$top to narrow the result. The group id returned here is what group-members.list, group-sites.list and planner-plans.list ($filter=owner eq) expect.
get_single_share_point_group_by_id
Get a single Microsoft 365 group by id. The ONLY parameter needed is the group id, passed as the path id. Earlier versions also demanded site_id, store_id, site-id, store-id and group-id; none appear in the path and Graph rejects them with 400 "Unrecognized query argument specified". Verified working with the id alone. Required: id.
list_all_share_point_group_sites
Get the root SharePoint site of a Microsoft 365 group. Requires the Sites.Read.All permission in addition to group read access; with a delegated connection that lacks it, this returns 403 Access denied even when groups.list succeeds. Required: group_id (the Entra group id, from groups.list).
list_all_share_point_me
Get the current authenticated user's profile in SharePoint via the Microsoft Graph /me endpoint. Returns: displayName, id, token_type, scope, expires_in, ext_expires_in, access_token, refresh_token. No required parameters.
list_all_share_point_root_site
Get the root SharePoint site within a tenant. Returns the site object including its id, displayName, name, webUrl, createdDateTime, lastModifiedDateTime, and isPersonalSite.
share_point_drive_item_download_download
Download the content of a SharePoint drive item file as a binary stream. Returns the file's binary content stream (application/octet-stream). Required: site_id, drive_id, item_id.
get_single_share_point_drive_items_v_2_by_id
Get a single SharePoint drive item by id. Returns: id, name, createdDateTime, lastModifiedDateTime, webUrl, isPersonalSite, displayName. Required: drive_id, id.
list_all_share_point_drive_items_v_2
List children of a SharePoint drive item, expanding listItem data for each child. Returns: id, name, createdDateTime, description, eTag, lastModifiedDateTime, webUrl. Required: drive_id. Defaults to listing root children when item_id is omitted.
update_a_share_point_drive_items_v_2_by_id
Update a SharePoint drive item by id. Returns: id, name, createdDateTime, description, eTag, lastModifiedDateTime, webUrl. Required: drive_id, id.
create_a_share_point_drive_item_child
Create a new child item (such as a folder or file) under a parent SharePoint drive item. Returns: id, name, displayName, description, eTag, webUrl, createdDateTime, lastModifiedDateTime, isPersonalSite, root, sharepointIds, siteCollection, analytics, contentTypes, drive, drives, items, lists, operations, permissions, sites, columns, onenote, termStore, termStores. Required: drive_id,…
share_point_drive_item_content_upload_by_site_path
Upload file content to a SharePoint site's default drive by specifying the parent folder path and file name. Returns the driveItem object including id, name, createdDateTime, lastModifiedDateTime, eTag, and webUrl. Required: site_id, parent_id, file_name.
create_a_share_point_drive_item_content
Upload new file content to a SharePoint drive by specifying the parent item and file name. Returns the driveItem object including id, name, createdDateTime, lastModifiedDateTime, eTag, and webUrl. Required: drive_id, parent_id, file_name.
update_a_share_point_drive_item_content_by_id
Replace the content of an existing SharePoint driveItem by id. Returns the driveItem object including id, name, createdDateTime, lastModifiedDateTime, eTag, and webUrl. Required: drive_id, id.
create_a_share_point_drive_item_upload_session
Create an upload session in SharePoint to begin a resumable file upload for a new drive item under a parent folder. Returns: uploadUrl, expirationDateTime, nextExpectedRanges. Required: drive_id, item_id, file_name. NOTE ON ETAGS: this method also sends an If-Match header from the optional etag query param. Creating a session for a NEW file name succeeds without it, but pointing it at a name that already exists and omitting etag returns 412 - pass the existing item's eTag in that case.
share_point_drive_item_upload_sessions_create_for_item
Create an upload session in SharePoint to update the content of an existing drive item via resumable chunked upload. Returns: uploadUrl, expirationDateTime, nextExpectedRanges. VERIFIED behaviour: with a correct etag this returns an uploadUrl; with a stale etag, or with etag omitted entirely, it fails with 412 "ETag does not match current item's value" - the method always sends If-Match, so etag is effectively required even though it is a query parameter. PUT the file bytes to the returned uploadUrl in ranges; the session is not the upload itself. Required: drive_id, item_id, etag.
list_all_share_point_drive_item_version
List versions of a drive item in a SharePoint document library. Returns: id, lastModifiedDateTime, createdDateTime, displayName, name, webUrl, isPersonalSite, eTag, description, root, sharepointIds, siteCollection. Required: site_id, drive_id, item_id.
get_single_share_point_share_by_id
Resolve a sharing link to the driveItem it points at, with children expanded. The id is NOT a site, drive or item id - it must be either a sharing token, or a sharing URL encoded as "u!" followed by the base64url of the URL (standard base64 with + replaced by -, / replaced by _, and trailing = stripped). A link to a site rather than a file or folder returns 400 "Share url does not point to a drive item". Required: id.
create_a_share_point_site_item_content
Upload binary file content to create or replace a file in a SharePoint site, addressing it by site, parent item, and file name. Returns: id, name, createdDateTime, lastModifiedDateTime, webUrl, isPersonalSite, displayName. Required: site_id, parent_id, file_name.
create_a_share_point_ensure_user
Resolve a user on a SharePoint site via the SharePoint REST API, creating the site user entry if it does not exist. TWO THINGS TO KNOW. First, this method builds its own base URL from a truto_base query parameter - pass truto_base as the site URL (e.g. https://contoso.sharepoint.com/sites/TeamA); omit it and the request resolves against the Graph host and fails with 404 "Invalid version: _api". Second, /_api/ is the SharePoint REST surface rather than Graph, and the connection Graph OAuth token is not accepted there - the call returns 401 even with truto_base set. The same limitation applies to role-assignments.list. Required: truto_base, and logonName in the body.
list_all_share_point_subscriptions
List active Microsoft Graph subscriptions in SharePoint. Returns: id, applicationId, changeType, clientState, creatorId, encryptionCertificate, encryptionCertificateId, expirationDateTime, includeResourceData, latestSupportedTlsVersion, lifecycleNotificationUrl, notificationQueryOptions, notificationUrl, notificationUrlAppId, resource.
get_single_share_point_subscription_by_id
Get a Microsoft Graph change-notification subscription by id. The id must be the subscription GUID returned by subscriptions.list or subscriptions.create - it is NOT a site, drive, list or item id. Passing anything else returns 400 "SubscriptionId Guid format is invalid or contained all zeros". Required: id.
create_a_share_point_subscription
Create a Microsoft Graph subscription to receive change notifications when SharePoint data changes. Returns the created subscription including id, changeType, resource, notificationUrl, and expirationDateTime. Required: changeType, notificationUrl, resource, expirationDateTime.
update_a_share_point_subscription_by_id
Update a Microsoft Graph subscription's expirationDateTime for renewal and/or notificationUrl for delivery. Returns the updated subscription including id, changeType, resource, notificationUrl, and expirationDateTime. Required: id.
delete_a_share_point_subscription_by_id
Delete a Microsoft Graph subscription by id to stop receiving change notifications. Returns an empty 204 response on success. Required: id.
share_point_subscriptions_reauthorize
Reauthorize a Microsoft Graph subscription when you receive a reauthorizationRequired challenge. Returns an empty 204 response on success. Required: id.
list_all_share_point_drive_items_delta
Track incremental changes to items under the root of a SharePoint drive using a delta query. Returns: value, @odata.nextLink, @odata.deltaLink, id, isPersonalSite, displayName, name, createdDateTime, lastModifiedDateTime, webUrl.nextLink, @odata.deltaLink. Required: drive_id.
list_all_share_point_site_drive_items_delta
Track changes to a site's default document library (delta query). Returns the changed driveItems in value, plus a deltaLink carrying the token for the next call. delta_token is effectively REQUIRED: the method always appends token={{query.delta_token}}, so leaving it out sends the unsubstituted placeholder and Graph rejects the call with 400 "One of the provided arguments is not acceptable". Pass delta_token=latest for a starting cursor without enumerating the library (VERIFIED: returns 200 with an empty set), or the token from the previous deltaLink to get only subsequent changes. Required: site_id, delta_token.
list_all_share_point_planner_plans
List Microsoft Planner plans. Graph rejects this collection unbound: you MUST pass $filter on the owner property, e.g. $filter=owner eq '
get_single_share_point_planner_plan_by_id
Get one Planner plan by id. The response carries an @odata.etag - keep it, update and delete require it. Required: id.
create_a_share_point_planner_plan
Create a Planner plan. A plan must belong to a Microsoft 365 group - set container.containerId to the group id. title is required. The signed-in user must be a member of that group. Required: title, container.
update_a_share_point_planner_plan_by_id
Update a Planner plan (in practice, its title). Requires the etag query param, taken from the @odata.etag of a prior get - Planner sends it as If-Match and returns 409 Conflict if it is stale (400 if the param is omitted). Send only the fields you are changing. Required: id, etag.
delete_a_share_point_planner_plan_by_id
Delete a Planner plan. This permanently removes the plan and every bucket and task in it. Requires the etag query param (sent as If-Match); a stale etag returns 409 Conflict, and omitting the param returns 400. Returns an empty 204 on success. Required: id, etag.
list_all_share_point_planner_buckets
List the buckets (board columns) of a Planner plan. Buckets are how a Planner board is divided; a task's bucketId must reference one of these. Required: plan_id.
get_single_share_point_planner_bucket_by_id
Get one Planner bucket by id. Note the path is /planner/buckets/{id} - buckets are addressed globally, not under their plan. Keep the returned @odata.etag for update and delete. Required: id.
create_a_share_point_planner_bucket
Create a bucket in a Planner plan. name and planId are required. Set orderHint to " !" to place it first on the board, or omit it to append. Required: name, planId.
update_a_share_point_planner_bucket_by_id
Update a Planner bucket - rename it or move it on the board via orderHint. Requires the etag query param from a prior read (sent as If-Match); 409 Conflict if stale, 400 if omitted. Required: id, etag.
delete_a_share_point_planner_bucket_by_id
Delete a Planner bucket. Tasks in the bucket are NOT deleted - they become unbucketed in the same plan. Requires the etag query param (sent as If-Match). Returns an empty 204 on success. Required: id, etag.
list_all_share_point_planner_tasks
List Microsoft Planner tasks. Graph rejects this collection unbound: you MUST pass $filter on planId, e.g. $filter=planId eq '
get_single_share_point_planner_task_by_id
Get one Planner task by id. Returns the task fields only - the description, checklist and references are on the separate task details entity. Keep the returned @odata.etag for update and delete. Required: id.
create_a_share_point_planner_task
Create a Planner task. planId and title are required; bucketId is optional but must reference a bucket in the same plan. Assign people by keying assignments on their user id. percentComplete 0/50/100 maps to Not started / In progress / Completed. Required: planId, title.
update_a_share_point_planner_task_by_id
Update a Planner task - retitle it, move buckets, set progress, reassign or change dates. Requires the etag query param, taken from the @odata.etag of a prior read; Planner sends it as If-Match and returns 409 Conflict if it is stale (400 if the param is omitted). Send only the fields you are changing. Required: id, etag.
delete_a_share_point_planner_task_by_id
Delete a Planner task. Requires the etag query param (sent as If-Match); a stale etag returns 409 Conflict, and omitting the param returns 400. Returns an empty 204 on success. Required: id, etag.
Why Truto
Why use Truto’s MCP server for SharePoint
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 700+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for SharePoint
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
Unified Knowledge Base API
Unified User Directory API
Unified File Storage API
Drive-Items
Drive Items are the files and folders present in a file storage system. These items are usually part of a Drive. You can differentiate between files and folders using the type attribute.
Drives
Drives is a collection of files and folders. They could have multiple Drive Items within them. Users could have multiple Drives accessible to them in a file storage system.
Permissions
Permissions can answer your questions around which User has access to do what on a Drive Item or a Drive.
Webhook-Subscriptions
Webhook subscriptions allow you to register for real-time notifications when changes occur in file storage systems.
Workspaces
Workspaces represent the top-level subdivision in a file storage system. They usually have their own set of drives, groups and users. Some of the usual terminologies used by the products for the top-level subdivision are projects, bases, spaces, workspace, etc.
Unified Search API
Search
Search endpoint for all the apps.
How It Works
From zero to integrated
Go live with SharePoint in under an hour. No boilerplate, no maintenance burden.
Link your customer’s SharePoint account
Use Truto’s frontend SDK to connect your customer’s SharePoint account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call SharePoint
Truto’s Proxy API is a 1-to-1 mapping of the SharePoint API. You call us, we call SharePoint, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate SharePoint’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about SharePoint on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How does authentication work for SharePoint integrations through Truto?
SharePoint uses OAuth 2.0 via Microsoft Entra ID (Azure AD). Truto manages the full OAuth flow — token acquisition, refresh, and storage — so your end users simply authorize access through a consent screen and you never handle credentials directly.
How does Truto handle SharePoint's hierarchical structure of sites and drives?
Truto provides dedicated tools — list_all_sharepoint_sites and list_all_sharepoint_drives — that let you enumerate all sites a connected user has access to, then drill into the document libraries (drives) within each site. From there, the Unified File Storage API gives you access to drive items, folders, and permissions.
Can I access SharePoint page and wiki content, not just files?
Yes. The Unified Knowledge Base API exposes Spaces, Pages, and Page-Content resources, allowing you to read structured intranet and wiki content from SharePoint sites — not just documents stored in drives.
How are file permissions handled when reading SharePoint data?
The Unified File Storage API includes a Permissions resource that exposes the access control lists (ACLs) on drive items. You can read these permissions to enforce the same access boundaries in your app that exist in the customer's SharePoint environment.
Does Truto handle pagination and rate limits for the SharePoint / Microsoft Graph API?
Yes. Truto abstracts away Microsoft Graph API pagination and manages rate limit retries automatically. You interact with a consistent Unified API interface regardless of the underlying API's quirks.
What operations are supported — read-only or read-write?
The Unified File Storage API supports both reading and writing drive items, so you can list, download, upload, and organize files. The Unified Knowledge Base, User Directory, and Search APIs provide read access to pages, users, and search results respectively.
From the Blog
SharePoint integration guides
Deep dives, architecture guides, and practical tutorials for building SharePoint integrations.
SharePoint
Get SharePoint integrated into your app
Our team understands what it takes to make a SharePoint integration successful. A short, crisp 30 minute call with folks who understand the problem.