[{"data":1,"prerenderedAt":2929},["ShallowReactive",2],{"navigation_docs":3,"docs-navigation-with-icons":431,"-docs-guides-mcp":577,"-docs-guides-mcp-surround":2924},[4,66,87,132,417],{"title":5,"path":6,"stem":7,"children":8,"page":65},"Api","\u002Fdocs\u002Fapi","docs\u002Fapi",[9,13,17,21,25,29,33,37,41,45,49,53,57,61],{"title":10,"path":11,"stem":12},"Best Practices","\u002Fdocs\u002Fapi\u002Fbest-practices","docs\u002Fapi\u002Fbest-practices",{"title":14,"path":15,"stem":16},"Blog","\u002Fdocs\u002Fapi\u002Fblog","docs\u002Fapi\u002Fblog",{"title":18,"path":19,"stem":20},"Code Examples","\u002Fdocs\u002Fapi\u002Fcode-examples","docs\u002Fapi\u002Fcode-examples",{"title":22,"path":23,"stem":24},"Collections","\u002Fdocs\u002Fapi\u002Fcollections","docs\u002Fapi\u002Fcollections",{"title":26,"path":27,"stem":28},"Field Types","\u002Fdocs\u002Fapi\u002Ffield-types","docs\u002Fapi\u002Ffield-types",{"title":30,"path":31,"stem":32},"Rate Limits & Errors","\u002Fdocs\u002Fapi\u002Flimits-and-errors","docs\u002Fapi\u002Flimits-and-errors",{"title":34,"path":35,"stem":36},"Media","\u002Fdocs\u002Fapi\u002Fmedia","docs\u002Fapi\u002Fmedia",{"title":38,"path":39,"stem":40},"Overview","\u002Fdocs\u002Fapi\u002Foverview","docs\u002Fapi\u002Foverview",{"title":42,"path":43,"stem":44},"Pages","\u002Fdocs\u002Fapi\u002Fpages","docs\u002Fapi\u002Fpages",{"title":46,"path":47,"stem":48},"Query Parameters","\u002Fdocs\u002Fapi\u002Fquery-parameters","docs\u002Fapi\u002Fquery-parameters",{"title":50,"path":51,"stem":52},"Responses & Caching","\u002Fdocs\u002Fapi\u002Fresponses","docs\u002Fapi\u002Fresponses",{"title":54,"path":55,"stem":56},"Troubleshooting","\u002Fdocs\u002Fapi\u002Ftroubleshooting","docs\u002Fapi\u002Ftroubleshooting",{"title":58,"path":59,"stem":60},"Validation","\u002Fdocs\u002Fapi\u002Fvalidation","docs\u002Fapi\u002Fvalidation",{"title":62,"path":63,"stem":64},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002Fapi\u002Fwebhooks",false,{"title":67,"path":68,"stem":69,"children":70,"page":65},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started",[71,75,79,83],{"title":72,"path":73,"stem":74},"Authentication","\u002Fdocs\u002Fgetting-started\u002Fauthentication","docs\u002Fgetting-started\u002Fauthentication",{"title":76,"path":77,"stem":78},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002Fgetting-started\u002Fintroduction",{"title":80,"path":81,"stem":82},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002Fgetting-started\u002Fquickstart",{"title":84,"path":85,"stem":86},"Write Operations","\u002Fdocs\u002Fgetting-started\u002Fwrite-operations","docs\u002Fgetting-started\u002Fwrite-operations",{"title":88,"path":89,"stem":90,"children":91,"page":65},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides",[92,96,100,104,108,112,116,120,124,128],{"title":93,"path":94,"stem":95},"Admin Interface","\u002Fdocs\u002Fguides\u002Fadmin-interface","docs\u002Fguides\u002Fadmin-interface",{"title":97,"path":98,"stem":99},"ButterCMS Migration","\u002Fdocs\u002Fguides\u002Fbuttercms-migration","docs\u002Fguides\u002Fbuttercms-migration",{"title":101,"path":102,"stem":103},"AI Agents (MCP)","\u002Fdocs\u002Fguides\u002Fmcp","docs\u002Fguides\u002Fmcp",{"title":105,"path":106,"stem":107},"Migrations","\u002Fdocs\u002Fguides\u002Fmigrations","docs\u002Fguides\u002Fmigrations",{"title":109,"path":110,"stem":111},"Page Management","\u002Fdocs\u002Fguides\u002Fpage-management","docs\u002Fguides\u002Fpage-management",{"title":113,"path":114,"stem":115},"Previewing content","\u002Fdocs\u002Fguides\u002Fpreviewing-content","docs\u002Fguides\u002Fpreviewing-content",{"title":117,"path":118,"stem":119},"Public API Usage","\u002Fdocs\u002Fguides\u002Fpublic-api-usage","docs\u002Fguides\u002Fpublic-api-usage",{"title":121,"path":122,"stem":123},"Schema Builder","\u002Fdocs\u002Fguides\u002Fschema-builder","docs\u002Fguides\u002Fschema-builder",{"title":125,"path":126,"stem":127},"User Management","\u002Fdocs\u002Fguides\u002Fuser-management","docs\u002Fguides\u002Fuser-management",{"title":129,"path":130,"stem":131},"Rich Text Editor","\u002Fdocs\u002Fguides\u002Fwysiwyg-editor","docs\u002Fguides\u002Fwysiwyg-editor",{"title":133,"path":134,"stem":135,"children":136,"page":65},"Sdk","\u002Fdocs\u002Fsdk","docs\u002Fsdk",[137,140,144,148,152],{"title":38,"path":138,"stem":139},"\u002Fdocs\u002Fsdk\u002Freadme","docs\u002Fsdk\u002FREADME",{"title":141,"path":142,"stem":143},"Astro","\u002Fdocs\u002Fsdk\u002Fastro","docs\u002Fsdk\u002Fastro",{"title":145,"path":146,"stem":147},"Next.js","\u002Fdocs\u002Fsdk\u002Fnextjs","docs\u002Fsdk\u002Fnextjs",{"title":149,"path":150,"stem":151},"Nuxt","\u002Fdocs\u002Fsdk\u002Fnuxt","docs\u002Fsdk\u002Fnuxt",{"title":153,"path":154,"stem":155,"children":156,"page":65},"Reference","\u002Fdocs\u002Fsdk\u002Freference","docs\u002Fsdk\u002Freference",[157,161,230,243,392],{"title":158,"path":159,"stem":160},"@tentocms\u002Fclient","\u002Fdocs\u002Fsdk\u002Freference\u002Freadme","docs\u002Fsdk\u002Freference\u002FREADME",{"title":162,"path":163,"stem":164,"children":165,"page":65},"Classes","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses","docs\u002Fsdk\u002Freference\u002Fclasses",[166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226],{"title":167,"path":168,"stem":169},"Class: BlogCategoriesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogcategoriesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogCategoriesResource",{"title":171,"path":172,"stem":173},"Class: BlogPostsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogpostsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogPostsResource",{"title":175,"path":176,"stem":177},"Class: BlogResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogResource",{"title":179,"path":180,"stem":181},"Class: BlogTagsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fblogtagsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FBlogTagsResource",{"title":183,"path":184,"stem":185},"Class: CollectionsResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionsresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsResource",{"title":187,"path":188,"stem":189},"Class: CollectionsWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fcollectionswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FCollectionsWriteResource",{"title":191,"path":192,"stem":193},"Class: MediaResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediaresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaResource",{"title":195,"path":196,"stem":197},"Class: MediaWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fmediawriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FMediaWriteResource",{"title":199,"path":200,"stem":201},"Class: PagesResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpagesresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesResource",{"title":203,"path":204,"stem":205},"Class: PagesWriteResource","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Fpageswriteresource","docs\u002Fsdk\u002Freference\u002Fclasses\u002FPagesWriteResource",{"title":207,"path":208,"stem":209},"Class: TentoAuthenticationError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoauthenticationerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoAuthenticationError",{"title":211,"path":212,"stem":213},"Class: TentoClient","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoclient","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoClient",{"title":215,"path":216,"stem":217},"Class: TentoError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoError",{"title":219,"path":220,"stem":221},"Class: TentoNetworkError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonetworkerror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNetworkError",{"title":223,"path":224,"stem":225},"Class: TentoNotFoundError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentonotfounderror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoNotFoundError",{"title":227,"path":228,"stem":229},"Class: TentoRateLimitError","\u002Fdocs\u002Fsdk\u002Freference\u002Fclasses\u002Ftentoratelimiterror","docs\u002Fsdk\u002Freference\u002Fclasses\u002FTentoRateLimitError",{"title":231,"path":232,"stem":233,"children":234,"page":65},"Functions","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions","docs\u002Fsdk\u002Freference\u002Ffunctions",[235,239],{"title":236,"path":237,"stem":238},"Function: getUrl()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fgeturl","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FgetUrl",{"title":240,"path":241,"stem":242},"Function: mockMedia()","\u002Fdocs\u002Fsdk\u002Freference\u002Ffunctions\u002Fmockmedia","docs\u002Fsdk\u002Freference\u002Ffunctions\u002FmockMedia",{"title":244,"path":245,"stem":246,"children":247,"page":65},"Interfaces","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces","docs\u002Fsdk\u002Freference\u002Finterfaces",[248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,356,360,364,368,372,376,380,384,388],{"title":249,"path":250,"stem":251},"Interface: BlogAuthor","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogauthor","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogAuthor",{"title":253,"path":254,"stem":255},"Interface: BlogCategory","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogcategory","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogCategory",{"title":257,"path":258,"stem":259},"Interface: BlogPost","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpost","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPost",{"title":261,"path":262,"stem":263},"Interface: BlogPostListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogpostlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogPostListOptions",{"title":265,"path":266,"stem":267},"Interface: BlogTag","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fblogtag","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FBlogTag",{"title":269,"path":270,"stem":271},"Interface: CollectionItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionItemResponse",{"title":273,"path":274,"stem":275},"Interface: CollectionListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListOptions",{"title":277,"path":278,"stem":279},"Interface: CollectionListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectionlistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionListResponse",{"title":281,"path":282,"stem":283},"Interface: CollectionTypeMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcollectiontypemeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCollectionTypeMeta",{"title":285,"path":286,"stem":287},"Interface: CreateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreateCollectionItemInput",{"title":289,"path":290,"stem":291},"Interface: CreatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fcreatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FCreatePageInput",{"title":293,"path":294,"stem":295},"Interface: DryRunResult","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fdryrunresult","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FDryRunResult",{"title":297,"path":298,"stem":299},"Interface: FilterCondition","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ffiltercondition","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FFilterCondition",{"title":301,"path":302,"stem":303},"Interface: ItemResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fitemresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FItemResponse",{"title":305,"path":306,"stem":307},"Interface: ListResponse\u003CT>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Flistresponse","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FListResponse",{"title":309,"path":310,"stem":311},"Interface: Media","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMedia",{"title":313,"path":314,"stem":315},"Interface: MediaItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaItem",{"title":317,"path":318,"stem":319},"Interface: MediaOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediaoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaOption",{"title":321,"path":322,"stem":323},"Interface: MediaTransformOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fmediatransformoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FMediaTransformOptions",{"title":325,"path":326,"stem":327},"Interface: Page\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPage",{"title":329,"path":330,"stem":331},"Interface: PageGetOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagegetoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageGetOptions",{"title":333,"path":334,"stem":335},"Interface: PageListOptions","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagelistoptions","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageListOptions",{"title":337,"path":338,"stem":339},"Interface: PageWithRedirect\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpagewithredirect","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPageWithRedirect",{"title":341,"path":342,"stem":343},"Interface: PaginationMeta","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpaginationmeta","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPaginationMeta",{"title":345,"path":346,"stem":347},"Interface: PreviewOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fpreviewoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FPreviewOption",{"title":349,"path":350,"stem":351},"Interface: RedirectInfo","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fredirectinfo","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRedirectInfo",{"title":353,"path":354,"stem":355},"Interface: RefTypesOption","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Freftypesoption","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRefTypesOption",{"title":357,"path":358,"stem":359},"Interface: RichTextSanitizationWarning","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Frichtextsanitizationwarning","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FRichTextSanitizationWarning",{"title":361,"path":362,"stem":363},"Interface: SeoMetadata","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fseometadata","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FSeoMetadata",{"title":365,"path":366,"stem":367},"Interface: TentoClientConfig","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentoclientconfig","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoClientConfig",{"title":369,"path":370,"stem":371},"Interface: TentoMedia","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Ftentomedia","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FTentoMedia",{"title":373,"path":374,"stem":375},"Interface: UpdateCollectionItemInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatecollectioniteminput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdateCollectionItemInput",{"title":377,"path":378,"stem":379},"Interface: UpdatePageInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fupdatepageinput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUpdatePageInput",{"title":381,"path":382,"stem":383},"Interface: UploadMediaInput","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fuploadmediainput","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FUploadMediaInput",{"title":385,"path":386,"stem":387},"Interface: WriteCollectionItem","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritecollectionitem","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWriteCollectionItem",{"title":389,"path":390,"stem":391},"Interface: WritePage","\u002Fdocs\u002Fsdk\u002Freference\u002Finterfaces\u002Fwritepage","docs\u002Fsdk\u002Freference\u002Finterfaces\u002FWritePage",{"title":393,"path":394,"stem":395,"children":396,"page":65},"Type Aliases","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases","docs\u002Fsdk\u002Freference\u002Ftype-aliases",[397,401,405,409,413],{"title":398,"path":399,"stem":400},"Type Alias: BlogPostListItem","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListItem",{"title":402,"path":403,"stem":404},"Type Alias: BlogPostListResponse","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fblogpostlistresponse","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FBlogPostListResponse",{"title":406,"path":407,"stem":408},"Type Alias: CollectionItem\u003CTContent>","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fcollectionitem","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FCollectionItem",{"title":410,"path":411,"stem":412},"Type Alias: FilterOperator","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Ffilteroperator","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FFilterOperator",{"title":414,"path":415,"stem":416},"Type Alias: MediaMode","\u002Fdocs\u002Fsdk\u002Freference\u002Ftype-aliases\u002Fmediamode","docs\u002Fsdk\u002Freference\u002Ftype-aliases\u002FMediaMode",{"title":418,"path":419,"stem":420,"children":421,"page":65},"Typegen","\u002Fdocs\u002Ftypegen","docs\u002Ftypegen",[422,425,428],{"title":141,"path":423,"stem":424},"\u002Fdocs\u002Ftypegen\u002Fastro","docs\u002Ftypegen\u002Fastro",{"title":145,"path":426,"stem":427},"\u002Fdocs\u002Ftypegen\u002Fnextjs","docs\u002Ftypegen\u002Fnextjs",{"title":149,"path":429,"stem":430},"\u002Fdocs\u002Ftypegen\u002Fnuxt","docs\u002Ftypegen\u002Fnuxt",[432,462,472,494,572],{"title":5,"path":6,"stem":7,"children":433,"page":65},[434,436,438,440,442,444,446,448,450,452,454,456,458,460],{"title":10,"path":11,"stem":12,"icon":435},"i-lucide-sparkles",{"title":14,"path":15,"stem":16,"icon":437},"i-lucide-newspaper",{"title":18,"path":19,"stem":20,"icon":439},"i-lucide-terminal",{"title":22,"path":23,"stem":24,"icon":441},"i-lucide-layers",{"title":26,"path":27,"stem":28,"icon":443},"i-lucide-type",{"title":30,"path":31,"stem":32,"icon":445},"i-lucide-triangle-alert",{"title":34,"path":35,"stem":36,"icon":447},"i-lucide-image",{"title":38,"path":39,"stem":40,"icon":449},"i-lucide-map",{"title":42,"path":43,"stem":44,"icon":451},"i-lucide-file-text",{"title":46,"path":47,"stem":48,"icon":453},"i-lucide-sliders-horizontal",{"title":50,"path":51,"stem":52,"icon":455},"i-lucide-braces",{"title":54,"path":55,"stem":56,"icon":457},"i-lucide-wrench",{"title":58,"path":59,"stem":60,"icon":459},"i-lucide-shield-check",{"title":62,"path":63,"stem":64,"icon":461},"i-lucide-webhook",{"title":67,"path":68,"stem":69,"children":463,"page":65},[464,466,468,470],{"title":72,"path":73,"stem":74,"icon":465},"i-lucide-key-round",{"title":76,"path":77,"stem":78,"icon":467},"i-lucide-compass",{"title":80,"path":81,"stem":82,"icon":469},"i-lucide-rocket",{"title":84,"path":85,"stem":86,"icon":471},"i-lucide-pencil",{"title":88,"path":89,"stem":90,"children":473,"page":65},[474,476,478,480,482,484,486,488,490,492],{"title":93,"path":94,"stem":95,"icon":475},"i-lucide-layout-dashboard",{"title":97,"path":98,"stem":99,"icon":477},"i-lucide-package",{"title":101,"path":102,"stem":103,"icon":479},"i-lucide-bot",{"title":105,"path":106,"stem":107,"icon":481},"i-lucide-git-branch",{"title":109,"path":110,"stem":111,"icon":483},"i-lucide-files",{"title":113,"path":114,"stem":115,"icon":485},null,{"title":117,"path":118,"stem":119,"icon":487},"i-lucide-plug-zap",{"title":121,"path":122,"stem":123,"icon":489},"i-lucide-wand",{"title":125,"path":126,"stem":127,"icon":491},"i-lucide-users",{"title":129,"path":130,"stem":131,"icon":493},"i-lucide-pilcrow",{"title":133,"path":134,"stem":135,"children":495,"page":65},[496,497,498,500,502],{"title":38,"path":138,"stem":139,"icon":477},{"title":141,"path":142,"stem":143,"icon":469},{"title":145,"path":146,"stem":147,"icon":499},"i-lucide-triangle",{"title":149,"path":150,"stem":151,"icon":501},"i-lucide-hexagon",{"title":153,"path":154,"stem":155,"children":503,"page":65},[504,505,523,527,565],{"title":158,"path":159,"stem":160,"icon":485},{"title":162,"path":163,"stem":164,"children":506,"page":65},[507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522],{"title":167,"path":168,"stem":169,"icon":485},{"title":171,"path":172,"stem":173,"icon":485},{"title":175,"path":176,"stem":177,"icon":485},{"title":179,"path":180,"stem":181,"icon":485},{"title":183,"path":184,"stem":185,"icon":485},{"title":187,"path":188,"stem":189,"icon":485},{"title":191,"path":192,"stem":193,"icon":485},{"title":195,"path":196,"stem":197,"icon":485},{"title":199,"path":200,"stem":201,"icon":485},{"title":203,"path":204,"stem":205,"icon":485},{"title":207,"path":208,"stem":209,"icon":485},{"title":211,"path":212,"stem":213,"icon":485},{"title":215,"path":216,"stem":217,"icon":485},{"title":219,"path":220,"stem":221,"icon":485},{"title":223,"path":224,"stem":225,"icon":485},{"title":227,"path":228,"stem":229,"icon":485},{"title":231,"path":232,"stem":233,"children":524,"page":65},[525,526],{"title":236,"path":237,"stem":238,"icon":485},{"title":240,"path":241,"stem":242,"icon":485},{"title":244,"path":245,"stem":246,"children":528,"page":65},[529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564],{"title":249,"path":250,"stem":251,"icon":485},{"title":253,"path":254,"stem":255,"icon":485},{"title":257,"path":258,"stem":259,"icon":485},{"title":261,"path":262,"stem":263,"icon":485},{"title":265,"path":266,"stem":267,"icon":485},{"title":269,"path":270,"stem":271,"icon":485},{"title":273,"path":274,"stem":275,"icon":485},{"title":277,"path":278,"stem":279,"icon":485},{"title":281,"path":282,"stem":283,"icon":485},{"title":285,"path":286,"stem":287,"icon":485},{"title":289,"path":290,"stem":291,"icon":485},{"title":293,"path":294,"stem":295,"icon":485},{"title":297,"path":298,"stem":299,"icon":485},{"title":301,"path":302,"stem":303,"icon":485},{"title":305,"path":306,"stem":307,"icon":485},{"title":309,"path":310,"stem":311,"icon":485},{"title":313,"path":314,"stem":315,"icon":485},{"title":317,"path":318,"stem":319,"icon":485},{"title":321,"path":322,"stem":323,"icon":485},{"title":325,"path":326,"stem":327,"icon":485},{"title":329,"path":330,"stem":331,"icon":485},{"title":333,"path":334,"stem":335,"icon":485},{"title":337,"path":338,"stem":339,"icon":485},{"title":341,"path":342,"stem":343,"icon":485},{"title":345,"path":346,"stem":347,"icon":485},{"title":349,"path":350,"stem":351,"icon":485},{"title":353,"path":354,"stem":355,"icon":485},{"title":357,"path":358,"stem":359,"icon":485},{"title":361,"path":362,"stem":363,"icon":485},{"title":365,"path":366,"stem":367,"icon":485},{"title":369,"path":370,"stem":371,"icon":485},{"title":373,"path":374,"stem":375,"icon":485},{"title":377,"path":378,"stem":379,"icon":485},{"title":381,"path":382,"stem":383,"icon":485},{"title":385,"path":386,"stem":387,"icon":485},{"title":389,"path":390,"stem":391,"icon":485},{"title":393,"path":394,"stem":395,"children":566,"page":65},[567,568,569,570,571],{"title":398,"path":399,"stem":400,"icon":485},{"title":402,"path":403,"stem":404,"icon":485},{"title":406,"path":407,"stem":408,"icon":485},{"title":410,"path":411,"stem":412,"icon":485},{"title":414,"path":415,"stem":416,"icon":485},{"title":418,"path":419,"stem":420,"children":573,"page":65},[574,575,576],{"title":141,"path":423,"stem":424,"icon":469},{"title":145,"path":426,"stem":427,"icon":499},{"title":149,"path":429,"stem":430,"icon":501},{"id":578,"title":101,"body":579,"description":2918,"extension":2919,"icon":479,"links":485,"meta":2920,"navigation":2921,"path":102,"seo":2922,"stem":103,"__hash__":2923},"docs\u002Fdocs\u002Fguides\u002Fmcp.md",{"type":580,"value":581,"toc":2889},"minimark",[582,594,610,613,618,639,642,682,689,704,712,715,719,729,747,751,756,811,818,960,967,971,982,1074,1078,1088,1307,1311,1326,1492,1498,1502,1505,1509,1515,1581,1592,1596,1599,1603,1700,1704,1814,1832,1836,1981,1985,1988,2022,2031,2034,2040,2044,2047,2069,2102,2105,2109,2122,2135,2159,2175,2187,2200,2203,2240,2243,2248,2259,2271,2275,2289,2374,2472,2487,2656,2659,2662,2728,2731,2734,2788,2791,2801,2804,2808,2850,2856,2860,2868,2885],[583,584,585,586,593],"p",{},"TentoCMS runs a ",[587,588,592],"a",{"href":589,"rel":590},"https:\u002F\u002Fmodelcontextprotocol.io",[591],"nofollow","Model Context Protocol"," server, so an AI\nagent can work with a project directly. Once connected, an agent can:",[595,596,597,601,604,607],"ul",{},[598,599,600],"li",{},"read the project's content model: page types, components and collection types",[598,602,603],{},"look at published examples and search existing content before it writes anything",[598,605,606],{},"create and update pages, publish them, and create collection items",[598,608,609],{},"upload media from a URL",[583,611,612],{},"The server is part of the API and is reached with an ordinary API key. It sees exactly one\nproject, the one that owns the key, and cannot read or change any other.",[614,615,617],"h2",{"id":616},"before-you-start","Before you start",[583,619,620,621,625,626,630,631,634,635,638],{},"You need a ",[622,623,624],"strong",{},"secret API key"," (",[627,628,629],"code",{},"tento_sk_*","). A project admin creates one in the admin panel\nunder ",[622,632,633],{},"Settings → API Keys"," (see ",[587,636,72],{"href":637},"..\u002Fgetting-started\u002Fauthentication"," for\nkey types).",[583,640,641],{},"Any secret key can use the read-only tools, which see drafts as well as published content.\nWriting needs a permission. Grant only the ones the agent needs:",[643,644,645,658],"table",{},[646,647,648],"thead",{},[649,650,651,655],"tr",{},[652,653,654],"th",{},"Permission",[652,656,657],{},"Unlocks",[659,660,661,672],"tbody",{},[649,662,663,669],{},[664,665,666],"td",{},[627,667,668],{},"content:write",[664,670,671],{},"Creating, updating and publishing pages, and creating collection items",[649,673,674,679],{},[664,675,676],{},[627,677,678],{},"media:write",[664,680,681],{},"Uploading media",[583,683,684,685,688],{},"A secret key must hold at least one permission. For an agent that should only read, grant\n",[627,686,687],{},"ai:use",": no MCP tool checks it, so the key can read everything and write nothing.",[583,690,691,692,695,696,699,700,703],{},"The endpoint refuses public (",[627,693,694],{},"tento_pk_*",") and preview (",[627,697,698],{},"preview_*",") keys with ",[627,701,702],{},"403",". The\nread tools return unpublished content, and those keys are made to be shared: a public key\nsits in a site's browser code, and a preview key is given to preview sites.",[583,705,706,711],{},[622,707,708,710],{},[627,709,668],{}," includes publishing."," There is no permission for \"drafts only\". If a\nperson should review everything before it goes live, ask the agent to leave pages as drafts,\nbut be aware that the key itself allows publishing.",[583,713,714],{},"Keep the key out of source control. Each example below shows a way to keep it out of a\ncommitted file.",[614,716,718],{"id":717},"the-endpoint","The endpoint",[720,721,726],"pre",{"className":722,"code":724,"language":725},[723],"language-text","https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp\n","text",[627,727,724],{"__ignoreMap":728},"",[583,730,731,732,735,736,739,740,743,744,746],{},"It uses the ",[622,733,734],{},"Streamable HTTP"," transport, statelessly: there is no session to keep alive,\nand each request stands alone. Send the key in the ",[627,737,738],{},"X-API-Key"," header. The API also accepts\nan ",[627,741,742],{},"?api_key="," query parameter, but never put a secret key in a URL (see\n",[587,745,72],{"href":637},").",[614,748,750],{"id":749},"connect-a-client","Connect a client",[752,753,755],"h3",{"id":754},"claude-code","Claude Code",[720,757,761],{"className":758,"code":759,"language":760,"meta":728,"style":728},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http tentocms https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp \\\n  --header \"X-API-Key: tento_sk_your_key_here\"\n","bash",[627,762,763,795],{"__ignoreMap":728},[764,765,768,772,776,779,782,785,788,791],"span",{"class":766,"line":767},"line",1,[764,769,771],{"class":770},"sBMFI","claude",[764,773,775],{"class":774},"sfazB"," mcp",[764,777,778],{"class":774}," add",[764,780,781],{"class":774}," --transport",[764,783,784],{"class":774}," http",[764,786,787],{"class":774}," tentocms",[764,789,790],{"class":774}," https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp",[764,792,794],{"class":793},"sTEyZ"," \\\n",[764,796,798,801,805,808],{"class":766,"line":797},2,[764,799,800],{"class":774},"  --header",[764,802,804],{"class":803},"sMK4o"," \"",[764,806,807],{"class":774},"X-API-Key: tento_sk_your_key_here",[764,809,810],{"class":803},"\"\n",[583,812,813,814,817],{},"This stores the key in your local Claude Code configuration, not in the repository. To share\nthe server with a team, commit a ",[627,815,816],{},".mcp.json"," that reads the key from each person's\nenvironment instead:",[720,819,823],{"className":820,"code":821,"language":822,"meta":728,"style":728},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"mcpServers\": {\n    \"tentocms\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp\",\n      \"headers\": { \"X-API-Key\": \"${TENTO_API_KEY}\" }\n    }\n  }\n}\n","json",[627,824,825,830,848,863,887,908,942,948,954],{"__ignoreMap":728},[764,826,827],{"class":766,"line":767},[764,828,829],{"class":803},"{\n",[764,831,832,835,839,842,845],{"class":766,"line":797},[764,833,834],{"class":803},"  \"",[764,836,838],{"class":837},"spNyl","mcpServers",[764,840,841],{"class":803},"\"",[764,843,844],{"class":803},":",[764,846,847],{"class":803}," {\n",[764,849,851,854,857,859,861],{"class":766,"line":850},3,[764,852,853],{"class":803},"    \"",[764,855,856],{"class":770},"tentocms",[764,858,841],{"class":803},[764,860,844],{"class":803},[764,862,847],{"class":803},[764,864,866,869,873,875,877,879,882,884],{"class":766,"line":865},4,[764,867,868],{"class":803},"      \"",[764,870,872],{"class":871},"sbssI","type",[764,874,841],{"class":803},[764,876,844],{"class":803},[764,878,804],{"class":803},[764,880,881],{"class":774},"http",[764,883,841],{"class":803},[764,885,886],{"class":803},",\n",[764,888,890,892,895,897,899,901,904,906],{"class":766,"line":889},5,[764,891,868],{"class":803},[764,893,894],{"class":871},"url",[764,896,841],{"class":803},[764,898,844],{"class":803},[764,900,804],{"class":803},[764,902,903],{"class":774},"https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp",[764,905,841],{"class":803},[764,907,886],{"class":803},[764,909,911,913,916,918,920,923,925,928,930,932,934,937,939],{"class":766,"line":910},6,[764,912,868],{"class":803},[764,914,915],{"class":871},"headers",[764,917,841],{"class":803},[764,919,844],{"class":803},[764,921,922],{"class":803}," {",[764,924,804],{"class":803},[764,926,738],{"class":927},"swJcz",[764,929,841],{"class":803},[764,931,844],{"class":803},[764,933,804],{"class":803},[764,935,936],{"class":774},"${TENTO_API_KEY}",[764,938,841],{"class":803},[764,940,941],{"class":803}," }\n",[764,943,945],{"class":766,"line":944},7,[764,946,947],{"class":803},"    }\n",[764,949,951],{"class":766,"line":950},8,[764,952,953],{"class":803},"  }\n",[764,955,957],{"class":766,"line":956},9,[764,958,959],{"class":803},"}\n",[583,961,962,963,966],{},"Run ",[627,964,965],{},"\u002Fmcp"," inside Claude Code to confirm the server is connected and see its tools.",[752,968,970],{"id":969},"cursor","Cursor",[583,972,973,974,977,978,981],{},"Add the server to ",[627,975,976],{},".cursor\u002Fmcp.json"," in the project, or ",[627,979,980],{},"~\u002F.cursor\u002Fmcp.json"," for every project:",[720,983,985],{"className":820,"code":984,"language":822,"meta":728,"style":728},"{\n  \"mcpServers\": {\n    \"tentocms\": {\n      \"url\": \"https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp\",\n      \"headers\": { \"X-API-Key\": \"${env:TENTO_API_KEY}\" }\n    }\n  }\n}\n",[627,986,987,991,1003,1015,1033,1062,1066,1070],{"__ignoreMap":728},[764,988,989],{"class":766,"line":767},[764,990,829],{"class":803},[764,992,993,995,997,999,1001],{"class":766,"line":797},[764,994,834],{"class":803},[764,996,838],{"class":837},[764,998,841],{"class":803},[764,1000,844],{"class":803},[764,1002,847],{"class":803},[764,1004,1005,1007,1009,1011,1013],{"class":766,"line":850},[764,1006,853],{"class":803},[764,1008,856],{"class":770},[764,1010,841],{"class":803},[764,1012,844],{"class":803},[764,1014,847],{"class":803},[764,1016,1017,1019,1021,1023,1025,1027,1029,1031],{"class":766,"line":865},[764,1018,868],{"class":803},[764,1020,894],{"class":871},[764,1022,841],{"class":803},[764,1024,844],{"class":803},[764,1026,804],{"class":803},[764,1028,903],{"class":774},[764,1030,841],{"class":803},[764,1032,886],{"class":803},[764,1034,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1058,1060],{"class":766,"line":889},[764,1036,868],{"class":803},[764,1038,915],{"class":871},[764,1040,841],{"class":803},[764,1042,844],{"class":803},[764,1044,922],{"class":803},[764,1046,804],{"class":803},[764,1048,738],{"class":927},[764,1050,841],{"class":803},[764,1052,844],{"class":803},[764,1054,804],{"class":803},[764,1056,1057],{"class":774},"${env:TENTO_API_KEY}",[764,1059,841],{"class":803},[764,1061,941],{"class":803},[764,1063,1064],{"class":766,"line":910},[764,1065,947],{"class":803},[764,1067,1068],{"class":766,"line":944},[764,1069,953],{"class":803},[764,1071,1072],{"class":766,"line":950},[764,1073,959],{"class":803},[752,1075,1077],{"id":1076},"vs-code-github-copilot","VS Code (GitHub Copilot)",[583,1079,973,1080,1083,1084,1087],{},[627,1081,1082],{},".vscode\u002Fmcp.json",". The ",[627,1085,1086],{},"inputs"," block makes VS Code prompt for the key\nonce and store it securely, rather than keeping it in the file:",[720,1089,1091],{"className":820,"code":1090,"language":822,"meta":728,"style":728},"{\n  \"inputs\": [\n    {\n      \"type\": \"promptString\",\n      \"id\": \"tento-api-key\",\n      \"description\": \"TentoCMS secret API key\",\n      \"password\": true\n    }\n  ],\n  \"servers\": {\n    \"tentocms\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp\",\n      \"headers\": { \"X-API-Key\": \"${input:tento-api-key}\" }\n    }\n  }\n}\n",[627,1092,1093,1097,1110,1115,1134,1154,1174,1188,1192,1197,1211,1224,1243,1262,1292,1297,1302],{"__ignoreMap":728},[764,1094,1095],{"class":766,"line":767},[764,1096,829],{"class":803},[764,1098,1099,1101,1103,1105,1107],{"class":766,"line":797},[764,1100,834],{"class":803},[764,1102,1086],{"class":837},[764,1104,841],{"class":803},[764,1106,844],{"class":803},[764,1108,1109],{"class":803}," [\n",[764,1111,1112],{"class":766,"line":850},[764,1113,1114],{"class":803},"    {\n",[764,1116,1117,1119,1121,1123,1125,1127,1130,1132],{"class":766,"line":865},[764,1118,868],{"class":803},[764,1120,872],{"class":770},[764,1122,841],{"class":803},[764,1124,844],{"class":803},[764,1126,804],{"class":803},[764,1128,1129],{"class":774},"promptString",[764,1131,841],{"class":803},[764,1133,886],{"class":803},[764,1135,1136,1138,1141,1143,1145,1147,1150,1152],{"class":766,"line":889},[764,1137,868],{"class":803},[764,1139,1140],{"class":770},"id",[764,1142,841],{"class":803},[764,1144,844],{"class":803},[764,1146,804],{"class":803},[764,1148,1149],{"class":774},"tento-api-key",[764,1151,841],{"class":803},[764,1153,886],{"class":803},[764,1155,1156,1158,1161,1163,1165,1167,1170,1172],{"class":766,"line":910},[764,1157,868],{"class":803},[764,1159,1160],{"class":770},"description",[764,1162,841],{"class":803},[764,1164,844],{"class":803},[764,1166,804],{"class":803},[764,1168,1169],{"class":774},"TentoCMS secret API key",[764,1171,841],{"class":803},[764,1173,886],{"class":803},[764,1175,1176,1178,1181,1183,1185],{"class":766,"line":944},[764,1177,868],{"class":803},[764,1179,1180],{"class":770},"password",[764,1182,841],{"class":803},[764,1184,844],{"class":803},[764,1186,1187],{"class":803}," true\n",[764,1189,1190],{"class":766,"line":950},[764,1191,947],{"class":803},[764,1193,1194],{"class":766,"line":956},[764,1195,1196],{"class":803},"  ],\n",[764,1198,1200,1202,1205,1207,1209],{"class":766,"line":1199},10,[764,1201,834],{"class":803},[764,1203,1204],{"class":837},"servers",[764,1206,841],{"class":803},[764,1208,844],{"class":803},[764,1210,847],{"class":803},[764,1212,1214,1216,1218,1220,1222],{"class":766,"line":1213},11,[764,1215,853],{"class":803},[764,1217,856],{"class":770},[764,1219,841],{"class":803},[764,1221,844],{"class":803},[764,1223,847],{"class":803},[764,1225,1227,1229,1231,1233,1235,1237,1239,1241],{"class":766,"line":1226},12,[764,1228,868],{"class":803},[764,1230,872],{"class":871},[764,1232,841],{"class":803},[764,1234,844],{"class":803},[764,1236,804],{"class":803},[764,1238,881],{"class":774},[764,1240,841],{"class":803},[764,1242,886],{"class":803},[764,1244,1246,1248,1250,1252,1254,1256,1258,1260],{"class":766,"line":1245},13,[764,1247,868],{"class":803},[764,1249,894],{"class":871},[764,1251,841],{"class":803},[764,1253,844],{"class":803},[764,1255,804],{"class":803},[764,1257,903],{"class":774},[764,1259,841],{"class":803},[764,1261,886],{"class":803},[764,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1288,1290],{"class":766,"line":1264},14,[764,1266,868],{"class":803},[764,1268,915],{"class":871},[764,1270,841],{"class":803},[764,1272,844],{"class":803},[764,1274,922],{"class":803},[764,1276,804],{"class":803},[764,1278,738],{"class":927},[764,1280,841],{"class":803},[764,1282,844],{"class":803},[764,1284,804],{"class":803},[764,1286,1287],{"class":774},"${input:tento-api-key}",[764,1289,841],{"class":803},[764,1291,941],{"class":803},[764,1293,1295],{"class":766,"line":1294},15,[764,1296,947],{"class":803},[764,1298,1300],{"class":766,"line":1299},16,[764,1301,953],{"class":803},[764,1303,1305],{"class":766,"line":1304},17,[764,1306,959],{"class":803},[752,1308,1310],{"id":1309},"claude-desktop","Claude Desktop",[583,1312,1313,1314,1321,1322,1325],{},"Claude Desktop's built-in connectors cannot send a custom header, so connect through the\n",[587,1315,1318],{"href":1316,"rel":1317},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fmcp-remote",[591],[627,1319,1320],{},"mcp-remote"," bridge, which needs Node.js. Add\nthis to ",[627,1323,1324],{},"claude_desktop_config.json"," and restart the app:",[720,1327,1329],{"className":820,"code":1328,"language":822,"meta":728,"style":728},"{\n  \"mcpServers\": {\n    \"tentocms\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote\",\n        \"https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp\",\n        \"--header\",\n        \"X-API-Key:${TENTO_API_KEY}\"\n      ],\n      \"env\": { \"TENTO_API_KEY\": \"tento_sk_your_key_here\" }\n    }\n  }\n}\n",[627,1330,1331,1335,1347,1359,1379,1392,1404,1414,1424,1435,1444,1449,1480,1484,1488],{"__ignoreMap":728},[764,1332,1333],{"class":766,"line":767},[764,1334,829],{"class":803},[764,1336,1337,1339,1341,1343,1345],{"class":766,"line":797},[764,1338,834],{"class":803},[764,1340,838],{"class":837},[764,1342,841],{"class":803},[764,1344,844],{"class":803},[764,1346,847],{"class":803},[764,1348,1349,1351,1353,1355,1357],{"class":766,"line":850},[764,1350,853],{"class":803},[764,1352,856],{"class":770},[764,1354,841],{"class":803},[764,1356,844],{"class":803},[764,1358,847],{"class":803},[764,1360,1361,1363,1366,1368,1370,1372,1375,1377],{"class":766,"line":865},[764,1362,868],{"class":803},[764,1364,1365],{"class":871},"command",[764,1367,841],{"class":803},[764,1369,844],{"class":803},[764,1371,804],{"class":803},[764,1373,1374],{"class":774},"npx",[764,1376,841],{"class":803},[764,1378,886],{"class":803},[764,1380,1381,1383,1386,1388,1390],{"class":766,"line":889},[764,1382,868],{"class":803},[764,1384,1385],{"class":871},"args",[764,1387,841],{"class":803},[764,1389,844],{"class":803},[764,1391,1109],{"class":803},[764,1393,1394,1397,1400,1402],{"class":766,"line":910},[764,1395,1396],{"class":803},"        \"",[764,1398,1399],{"class":774},"-y",[764,1401,841],{"class":803},[764,1403,886],{"class":803},[764,1405,1406,1408,1410,1412],{"class":766,"line":944},[764,1407,1396],{"class":803},[764,1409,1320],{"class":774},[764,1411,841],{"class":803},[764,1413,886],{"class":803},[764,1415,1416,1418,1420,1422],{"class":766,"line":950},[764,1417,1396],{"class":803},[764,1419,903],{"class":774},[764,1421,841],{"class":803},[764,1423,886],{"class":803},[764,1425,1426,1428,1431,1433],{"class":766,"line":956},[764,1427,1396],{"class":803},[764,1429,1430],{"class":774},"--header",[764,1432,841],{"class":803},[764,1434,886],{"class":803},[764,1436,1437,1439,1442],{"class":766,"line":1199},[764,1438,1396],{"class":803},[764,1440,1441],{"class":774},"X-API-Key:${TENTO_API_KEY}",[764,1443,810],{"class":803},[764,1445,1446],{"class":766,"line":1213},[764,1447,1448],{"class":803},"      ],\n",[764,1450,1451,1453,1456,1458,1460,1462,1464,1467,1469,1471,1473,1476,1478],{"class":766,"line":1226},[764,1452,868],{"class":803},[764,1454,1455],{"class":871},"env",[764,1457,841],{"class":803},[764,1459,844],{"class":803},[764,1461,922],{"class":803},[764,1463,804],{"class":803},[764,1465,1466],{"class":927},"TENTO_API_KEY",[764,1468,841],{"class":803},[764,1470,844],{"class":803},[764,1472,804],{"class":803},[764,1474,1475],{"class":774},"tento_sk_your_key_here",[764,1477,841],{"class":803},[764,1479,941],{"class":803},[764,1481,1482],{"class":766,"line":1245},[764,1483,947],{"class":803},[764,1485,1486],{"class":766,"line":1264},[764,1487,953],{"class":803},[764,1489,1490],{"class":766,"line":1294},[764,1491,959],{"class":803},[583,1493,1494,1495,1497],{},"Leave out the space after the colon in ",[627,1496,1441],{},". Some platforms split\narguments on spaces, which would break the header.",[752,1499,1501],{"id":1500},"clients-that-only-support-oauth","Clients that only support OAuth",[583,1503,1504],{},"Connectors that can only sign in with OAuth, such as custom connectors on claude.ai, cannot\nconnect yet. The endpoint accepts an API key and nothing else.",[752,1506,1508],{"id":1507},"check-the-connection-without-a-client","Check the connection without a client",[583,1510,1511,1512,844],{},"Ask the server for its tool list with ",[627,1513,1514],{},"curl",[720,1516,1518],{"className":758,"code":1517,"language":760,"meta":728,"style":728},"curl https:\u002F\u002Ftento-api.intelligentlending.co.uk\u002Fapi\u002Fv1\u002Fmcp \\\n  -H \"X-API-Key: tento_sk_your_key_here\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Accept: application\u002Fjson, text\u002Fevent-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}'\n",[627,1519,1520,1528,1541,1554,1567],{"__ignoreMap":728},[764,1521,1522,1524,1526],{"class":766,"line":767},[764,1523,1514],{"class":770},[764,1525,790],{"class":774},[764,1527,794],{"class":793},[764,1529,1530,1533,1535,1537,1539],{"class":766,"line":797},[764,1531,1532],{"class":774},"  -H",[764,1534,804],{"class":803},[764,1536,807],{"class":774},[764,1538,841],{"class":803},[764,1540,794],{"class":793},[764,1542,1543,1545,1547,1550,1552],{"class":766,"line":850},[764,1544,1532],{"class":774},[764,1546,804],{"class":803},[764,1548,1549],{"class":774},"Content-Type: application\u002Fjson",[764,1551,841],{"class":803},[764,1553,794],{"class":793},[764,1555,1556,1558,1560,1563,1565],{"class":766,"line":865},[764,1557,1532],{"class":774},[764,1559,804],{"class":803},[764,1561,1562],{"class":774},"Accept: application\u002Fjson, text\u002Fevent-stream",[764,1564,841],{"class":803},[764,1566,794],{"class":793},[764,1568,1569,1572,1575,1578],{"class":766,"line":889},[764,1570,1571],{"class":774},"  -d",[764,1573,1574],{"class":803}," '",[764,1576,1577],{"class":774},"{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}",[764,1579,1580],{"class":803},"'\n",[583,1582,1583,1584,1587,1588,1591],{},"The ",[627,1585,1586],{},"Accept"," header must list both types, or the server answers ",[627,1589,1590],{},"406 Not Acceptable",". MCP\nclients set it for you.",[614,1593,1595],{"id":1594},"tools","Tools",[583,1597,1598],{},"Every tool works within the key's project. You never pass a project id.",[752,1600,1602],{"id":1601},"content-model-read-only","Content model (read-only)",[643,1604,1605,1618],{},[646,1606,1607],{},[649,1608,1609,1612,1615],{},[652,1610,1611],{},"Tool",[652,1613,1614],{},"Arguments",[652,1616,1617],{},"Returns",[659,1619,1620,1633,1648,1660,1674,1686],{},[649,1621,1622,1627,1630],{},[664,1623,1624],{},[627,1625,1626],{},"tento_list_page_types",[664,1628,1629],{},"none",[664,1631,1632],{},"Every page type's name, slug and field count",[649,1634,1635,1640,1645],{},[664,1636,1637],{},[627,1638,1639],{},"tento_get_page_type",[664,1641,1642],{},[627,1643,1644],{},"slug",[664,1646,1647],{},"The page type's full field schema. Component fields include the schemas of the components they allow, and reference fields include the referenced collection type's schema",[649,1649,1650,1655,1657],{},[664,1651,1652],{},[627,1653,1654],{},"tento_list_components",[664,1656,1629],{},[664,1658,1659],{},"Every component's name, slug and field count",[649,1661,1662,1667,1671],{},[664,1663,1664],{},[627,1665,1666],{},"tento_get_component",[664,1668,1669],{},[627,1670,1644],{},[664,1672,1673],{},"The component's field schema",[649,1675,1676,1681,1683],{},[664,1677,1678],{},[627,1679,1680],{},"tento_list_collection_types",[664,1682,1629],{},[664,1684,1685],{},"Every collection type's name, slug and field count",[649,1687,1688,1693,1697],{},[664,1689,1690],{},[627,1691,1692],{},"tento_get_collection_type",[664,1694,1695],{},[627,1696,1644],{},[664,1698,1699],{},"The collection type's field schema",[752,1701,1703],{"id":1702},"context-read-only","Context (read-only)",[643,1705,1706,1716],{},[646,1707,1708],{},[649,1709,1710,1712,1714],{},[652,1711,1611],{},[652,1713,1614],{},[652,1715,1617],{},[659,1717,1718,1735,1755,1790,1802],{},[649,1719,1720,1725,1729],{},[664,1721,1722],{},[627,1723,1724],{},"tento_get_page",[664,1726,1727],{},[627,1728,1644],{},[664,1730,1731,1732],{},"The page's current draft: its fields exactly as stored, its SEO and status, and ",[627,1733,1734],{},"hasUnpublishedChanges",[649,1736,1737,1742,1752],{},[664,1738,1739],{},[627,1740,1741],{},"tento_get_example_pages",[664,1743,1744,1747,1748,1751],{},[627,1745,1746],{},"pageTypeSlug",", ",[627,1749,1750],{},"limit"," (1–5, default 3)",[664,1753,1754],{},"The most recently published pages of that type, with their fields and SEO",[649,1756,1757,1762,1783],{},[664,1758,1759],{},[627,1760,1761],{},"tento_search_content",[664,1763,1764,1747,1767,625,1769,1747,1772,1775,1776,1779,1780,1782],{},[627,1765,1766],{},"query",[627,1768,872],{},[627,1770,1771],{},"pages",[627,1773,1774],{},"collections"," or ",[627,1777,1778],{},"all","), ",[627,1781,1750],{}," (1–20, default 10)",[664,1784,1785,1786,1789],{},"Pages and collection items whose name or slug contains the query, ",[622,1787,1788],{},"drafts included",". Names, slugs and status only, not content",[649,1791,1792,1797,1799],{},[664,1793,1794],{},[627,1795,1796],{},"tento_get_content_stats",[664,1798,1629],{},[664,1800,1801],{},"Page counts by status, the project's page and collection types, and the number of media files",[649,1803,1804,1809,1811],{},[664,1805,1806],{},[627,1807,1808],{},"tento_generate_types",[664,1810,1629],{},[664,1812,1813],{},"TypeScript interfaces for every page type, component and collection type",[583,1815,1816,1818,1819,1822,1823,886,1826,1747,1829,746],{},[627,1817,1808],{}," uses the same generator as the ",[627,1820,1821],{},"@tentocms\u002Ftypegen"," CLI, so its output\nmatches what the CLI writes for the same project (",[587,1824,149],{"href":1825},"..\u002Ftypegen\u002Fnuxt",[587,1827,145],{"href":1828},"..\u002Ftypegen\u002Fnextjs",[587,1830,141],{"href":1831},"..\u002Ftypegen\u002Fastro",[752,1833,1835],{"id":1834},"writing","Writing",[643,1837,1838,1849],{},[646,1839,1840],{},[649,1841,1842,1844,1847],{},[652,1843,1611],{},[652,1845,1846],{},"Needs",[652,1848,1614],{},[659,1850,1851,1888,1913,1928,1956],{},[649,1852,1853,1858,1862],{},[664,1854,1855],{},[627,1856,1857],{},"tento_create_page",[664,1859,1860],{},[627,1861,668],{},[664,1863,1864,1747,1866,1747,1869,1747,1871,1747,1874,1747,1877,625,1880,1883,1884,1887],{},[627,1865,1746],{},[627,1867,1868],{},"name",[627,1870,1644],{},[627,1872,1873],{},"fields",[627,1875,1876],{},"seo",[627,1878,1879],{},"status",[627,1881,1882],{},"draft"," by default, or ",[627,1885,1886],{},"published",")",[649,1889,1890,1895,1899],{},[664,1891,1892],{},[627,1893,1894],{},"tento_update_page",[664,1896,1897],{},[627,1898,668],{},[664,1900,1901,1903,1904,1747,1906,1747,1909,1747,1911],{},[627,1902,1644],{}," (the page's current slug), and any of ",[627,1905,1868],{},[627,1907,1908],{},"newSlug",[627,1910,1873],{},[627,1912,1876],{},[649,1914,1915,1920,1924],{},[664,1916,1917],{},[627,1918,1919],{},"tento_publish_page",[664,1921,1922],{},[627,1923,668],{},[664,1925,1926],{},[627,1927,1644],{},[649,1929,1930,1935,1939],{},[664,1931,1932],{},[627,1933,1934],{},"tento_create_collection_item",[664,1936,1937],{},[627,1938,668],{},[664,1940,1941,1747,1944,1747,1946,1747,1948,1747,1950,625,1952,1883,1954,1887],{},[627,1942,1943],{},"collectionTypeSlug",[627,1945,1868],{},[627,1947,1644],{},[627,1949,1873],{},[627,1951,1879],{},[627,1953,1882],{},[627,1955,1886],{},[649,1957,1958,1963,1967],{},[664,1959,1960],{},[627,1961,1962],{},"tento_upload_media",[664,1964,1965],{},[627,1966,678],{},[664,1968,1969,1971,1972,1747,1975,1747,1978],{},[627,1970,894],{},", and optionally ",[627,1973,1974],{},"filename",[627,1976,1977],{},"altText",[627,1979,1980],{},"folder",[614,1982,1984],{"id":1983},"a-typical-session","A typical session",[583,1986,1987],{},"An agent does its best work when it reads before it writes:",[1989,1990,1991,1996,2001,2006,2011,2016],"ol",{},[598,1992,1993,1995],{},[627,1994,1626],{}," to see what kinds of page exist.",[598,1997,1998,2000],{},[627,1999,1639],{}," for the type it is about to write, to learn the fields.",[598,2002,2003,2005],{},[627,2004,1741],{}," to match the tone and structure of published pages.",[598,2007,2008,2010],{},[627,2009,1761],{}," to check the page doesn't already exist.",[598,2012,2013,2015],{},[627,2014,1857],{}," as a draft.",[598,2017,2018,2019,2021],{},"A person reviews the draft in the admin and publishes it, or the agent calls\n",[627,2020,1919],{},".",[583,2023,2024,2025,2027,2028,2030],{},"To change an existing page, the agent calls ",[627,2026,1724],{}," first and then\n",[627,2029,1894],{}," with the fields it is changing.",[583,2032,2033],{},"You don't have to spell this out. The tool descriptions steer agents towards it, so a\nprompt like this is enough:",[2035,2036,2037],"blockquote",{},[583,2038,2039],{},"Using TentoCMS, draft a new case study page about our work with Acme. Match the style of\nour existing case studies and leave it as a draft.",[614,2041,2043],{"id":2042},"writing-content","Writing content",[752,2045,2046],{"id":1873},"Fields",[583,2048,2049,2051,2052,2054,2055,2059,2060,2062,2063,2065,2066,746],{},[627,2050,1873],{}," is an object keyed by field name, shaped the same way as ",[627,2053,1873],{}," in the\n",[587,2056,2058],{"href":2057},"..\u002Fapi\u002Fpages#create-page","REST write API"," and checked against the page type's schema.\nImage and file fields take a media id: use the ",[627,2061,1140],{}," that ",[627,2064,1962],{}," returns (see\n",[587,2067,26],{"href":2068},"..\u002Fapi\u002Ffield-types#image",[595,2070,2071,2083,2093],{},[598,2072,2073,2076,2077,2080,2081,2021],{},[622,2074,2075],{},"Drafts can be incomplete."," Required fields are only enforced when content is published:\nwhen the page is created with ",[627,2078,2079],{},"status: \"published\"",", updated while already published, or\npublished with ",[627,2082,1919],{},[598,2084,2085,2088,2089,2092],{},[622,2086,2087],{},"Rich text is sanitised."," Markup that isn't allowed is removed before saving, and the\nresult includes a ",[627,2090,2091],{},"warnings"," list saying what was removed.",[598,2094,2095,2098,2099,2021],{},[622,2096,2097],{},"Content may be nested up to 15 levels deep."," It is also subject to the content size\nlimit in ",[587,2100,30],{"href":2101},"..\u002Fapi\u002Flimits-and-errors#payload-size-limits",[583,2103,2104],{},"Slugs must be at least three characters of lowercase letters, numbers and single hyphens,\nand cannot start or end with a hyphen.",[752,2106,2108],{"id":2107},"updating-a-page","Updating a page",[583,2110,2111,2114,2115,2117,2118,2121],{},[622,2112,2113],{},"Send only the fields you are changing."," Each field in ",[627,2116,1873],{}," replaces that field's value,\nand every field you leave out keeps its current value. To clear a field, set it to ",[627,2119,2120],{},"null",". A\nfield's value is replaced whole: to change one item in a repeater, send the full repeater.",[583,2123,2124,1747,2126,2128,2129,2131,2132,2134],{},[627,2125,1868],{},[627,2127,1908],{}," and ",[627,2130,1876],{}," are independent of ",[627,2133,1873],{},". Leave any of them out and it stays\nas it is.",[583,2136,2137,2138,2140,2141,2143,2144,2146,2147,2151,2152,2154,2155,2158],{},"Read the current draft with ",[627,2139,1724],{},". Its ",[627,2142,1873],{}," are in the same shape\n",[627,2145,1894],{}," takes. Don't rebuild them from a public API read instead: even in\n",[587,2148,2150],{"href":2149},"..\u002Fapi\u002Foverview#preview-mode","preview mode"," that substitutes variables, resolves media and\nreferences, and flattens components, so sending its ",[627,2153,1873],{}," back would replace variable\nplaceholders such as ",[627,2156,2157],{},"#{KEY}"," with their current values, and media ids with resolved objects.",[583,2160,2161,2164,2165,2167,2168,2170,2171,2174],{},[622,2162,2163],{},"Updating a published page changes its draft content, not the live content."," Visitors keep\nseeing the published ",[627,2166,1873],{}," until the page is published again, and ",[627,2169,1724],{}," reports\n",[627,2172,2173],{},"hasUnpublishedChanges: true"," until it is.",[583,2176,2177,1747,2179,2128,2181,2183,2184,2186],{},[627,2178,1868],{},[627,2180,1908],{},[627,2182,1876],{}," are not staged. They are stored once, for the draft and the live\npage alike, so an update changes them on the live page without a publish, and\n",[627,2185,1734],{}," does not count them. The page's cached copy is cleared when the\nupdate is saved, so visitors see the change straight away. A new slug moves the live page to\nthe new URL.",[583,2188,2189,2190,2192,2193,2196,2197,2199],{},"Unlike ",[627,2191,1894],{},", the REST API's ",[627,2194,2195],{},"PUT \u002Fapi\u002Fv1\u002Fpages\u002F:slug"," replaces the whole draft\nwith the ",[627,2198,1873],{}," it is sent.",[752,2201,2202],{"id":1876},"SEO",[583,2204,2205,2207,2208,1747,2211,1747,2214,886,2217,1747,2220,1747,2223,2128,2226,2229,2230,2232,2233,2236,2237,2021],{},[627,2206,1876],{}," takes the same object as the REST API: ",[627,2209,2210],{},"metaTitle",[627,2212,2213],{},"metaDescription",[627,2215,2216],{},"metaRobots",[627,2218,2219],{},"ogTitle",[627,2221,2222],{},"ogDescription",[627,2224,2225],{},"ogImageId",[627,2227,2228],{},"canonicalUrl",", with the same length limits. On an\nupdate, only the properties you send change. Set one to ",[627,2231,2120],{}," to clear it. A new page is\n",[627,2234,2235],{},"index"," unless you send ",[627,2238,2239],{},"metaRobots: \"noindex\"",[752,2241,681],{"id":2242},"uploading-media",[583,2244,2245,2247],{},[627,2246,1962],{}," fetches a file from a URL and adds it to the media library. The URL\nmust:",[595,2249,2250,2253,2256],{},[598,2251,2252],{},"use HTTPS",[598,2254,2255],{},"point at a public address. Private and internal network addresses are refused",[598,2257,2258],{},"serve the file directly. Redirects are not followed",[583,2260,2261,2262,2264,2265,2267,2268,2021],{},"File types and sizes are limited exactly as for uploads through the REST API; see\n",[587,2263,30],{"href":2101},". So is the number of\nuploads: each ",[627,2266,1962],{}," call counts against the same per-key media upload limit as\n",[627,2269,2270],{},"POST \u002Fapi\u002Fv1\u002Fmedia",[614,2272,2274],{"id":2273},"results-and-errors","Results and errors",[583,2276,2277,2278,2280,2281,2284,2285,2288],{},"A tool returns its result as JSON text. When a call fails, the tool result is marked as an\nerror and its JSON carries a ",[627,2279,627],{},", a ",[627,2282,2283],{},"message",", and usually a ",[627,2286,2287],{},"suggestion"," aimed at helping\nthe agent correct itself:",[720,2290,2292],{"className":820,"code":2291,"language":822,"meta":728,"style":728},"{\n  \"error\": {\n    \"code\": \"FORBIDDEN\",\n    \"message\": \"This API key does not have the 'content:write' permission.\",\n    \"suggestion\": \"Create a secret API key (tento_sk_*) with the 'content:write' permission in the TentoCMS admin panel.\"\n  }\n}\n",[627,2293,2294,2298,2311,2330,2349,2366,2370],{"__ignoreMap":728},[764,2295,2296],{"class":766,"line":767},[764,2297,829],{"class":803},[764,2299,2300,2302,2305,2307,2309],{"class":766,"line":797},[764,2301,834],{"class":803},[764,2303,2304],{"class":837},"error",[764,2306,841],{"class":803},[764,2308,844],{"class":803},[764,2310,847],{"class":803},[764,2312,2313,2315,2317,2319,2321,2323,2326,2328],{"class":766,"line":850},[764,2314,853],{"class":803},[764,2316,627],{"class":770},[764,2318,841],{"class":803},[764,2320,844],{"class":803},[764,2322,804],{"class":803},[764,2324,2325],{"class":774},"FORBIDDEN",[764,2327,841],{"class":803},[764,2329,886],{"class":803},[764,2331,2332,2334,2336,2338,2340,2342,2345,2347],{"class":766,"line":865},[764,2333,853],{"class":803},[764,2335,2283],{"class":770},[764,2337,841],{"class":803},[764,2339,844],{"class":803},[764,2341,804],{"class":803},[764,2343,2344],{"class":774},"This API key does not have the 'content:write' permission.",[764,2346,841],{"class":803},[764,2348,886],{"class":803},[764,2350,2351,2353,2355,2357,2359,2361,2364],{"class":766,"line":889},[764,2352,853],{"class":803},[764,2354,2287],{"class":770},[764,2356,841],{"class":803},[764,2358,844],{"class":803},[764,2360,804],{"class":803},[764,2362,2363],{"class":774},"Create a secret API key (tento_sk_*) with the 'content:write' permission in the TentoCMS admin panel.",[764,2365,810],{"class":803},[764,2367,2368],{"class":766,"line":910},[764,2369,953],{"class":803},[764,2371,2372],{"class":766,"line":944},[764,2373,959],{"class":803},[643,2375,2376,2386],{},[646,2377,2378],{},[649,2379,2380,2383],{},[652,2381,2382],{},"Code",[652,2384,2385],{},"Meaning",[659,2387,2388,2397,2407,2421,2433,2443,2459],{},[649,2389,2390,2394],{},[664,2391,2392],{},[627,2393,2325],{},[664,2395,2396],{},"The key isn't a secret key, or doesn't hold the permission the tool needs",[649,2398,2399,2404],{},[664,2400,2401],{},[627,2402,2403],{},"NOT_FOUND",[664,2405,2406],{},"No page type, component, collection type or page has that slug",[649,2408,2409,2414],{},[664,2410,2411],{},[627,2412,2413],{},"CONFLICT",[664,2415,2416,2417,1887],{},"The slug is taken, the page changed while the call ran, or the same call is already running (see ",[587,2418,2420],{"href":2419},"#repeated-calls","Repeated calls",[649,2422,2423,2428],{},[664,2424,2425],{},[627,2426,2427],{},"INVALID_CONTENT",[664,2429,2430,2432],{},[627,2431,1873],{}," doesn't match the schema, or a required field is empty when publishing",[649,2434,2435,2440],{},[664,2436,2437],{},[627,2438,2439],{},"PAYLOAD_TOO_LARGE",[664,2441,2442],{},"The content or the uploaded file is over its size limit",[649,2444,2445,2456],{},[664,2446,2447,1747,2450,1747,2453],{},[627,2448,2449],{},"INVALID_URL",[627,2451,2452],{},"FORBIDDEN_URL",[627,2454,2455],{},"FETCH_FAILED",[664,2457,2458],{},"The upload URL isn't HTTPS, points at a private address, or couldn't be downloaded",[649,2460,2461,2469],{},[664,2462,2463,1747,2466],{},[627,2464,2465],{},"VALIDATION_ERROR",[627,2467,2468],{},"INVALID_FILE_CONTENT",[664,2470,2471],{},"The uploaded file's name, folder or type was refused",[583,2473,2474,2476,2477,2480,2481,2484,2485,844],{},[627,2475,2427],{}," also carries ",[627,2478,2479],{},"details.errors",", one entry per problem, each with the ",[627,2482,2483],{},"path","\nof the field at fault and a ",[627,2486,2283],{},[720,2488,2490],{"className":820,"code":2489,"language":822,"meta":728,"style":728},"{\n  \"error\": {\n    \"code\": \"INVALID_CONTENT\",\n    \"message\": \"Content validation failed\",\n    \"suggestion\": \"Content validation failed. Use tento_get_page_type or tento_get_collection_type to see the required field schema.\",\n    \"details\": {\n      \"errors\": [{ \"path\": \"pageTitle\", \"message\": \"Title is required\", \"type\": \"required\" }]\n    }\n  }\n}\n",[627,2491,2492,2496,2508,2526,2545,2564,2577,2644,2648,2652],{"__ignoreMap":728},[764,2493,2494],{"class":766,"line":767},[764,2495,829],{"class":803},[764,2497,2498,2500,2502,2504,2506],{"class":766,"line":797},[764,2499,834],{"class":803},[764,2501,2304],{"class":837},[764,2503,841],{"class":803},[764,2505,844],{"class":803},[764,2507,847],{"class":803},[764,2509,2510,2512,2514,2516,2518,2520,2522,2524],{"class":766,"line":850},[764,2511,853],{"class":803},[764,2513,627],{"class":770},[764,2515,841],{"class":803},[764,2517,844],{"class":803},[764,2519,804],{"class":803},[764,2521,2427],{"class":774},[764,2523,841],{"class":803},[764,2525,886],{"class":803},[764,2527,2528,2530,2532,2534,2536,2538,2541,2543],{"class":766,"line":865},[764,2529,853],{"class":803},[764,2531,2283],{"class":770},[764,2533,841],{"class":803},[764,2535,844],{"class":803},[764,2537,804],{"class":803},[764,2539,2540],{"class":774},"Content validation failed",[764,2542,841],{"class":803},[764,2544,886],{"class":803},[764,2546,2547,2549,2551,2553,2555,2557,2560,2562],{"class":766,"line":889},[764,2548,853],{"class":803},[764,2550,2287],{"class":770},[764,2552,841],{"class":803},[764,2554,844],{"class":803},[764,2556,804],{"class":803},[764,2558,2559],{"class":774},"Content validation failed. Use tento_get_page_type or tento_get_collection_type to see the required field schema.",[764,2561,841],{"class":803},[764,2563,886],{"class":803},[764,2565,2566,2568,2571,2573,2575],{"class":766,"line":910},[764,2567,853],{"class":803},[764,2569,2570],{"class":770},"details",[764,2572,841],{"class":803},[764,2574,844],{"class":803},[764,2576,847],{"class":803},[764,2578,2579,2581,2584,2586,2588,2591,2593,2595,2597,2599,2601,2604,2606,2609,2611,2613,2615,2617,2619,2622,2624,2626,2628,2630,2632,2634,2636,2639,2641],{"class":766,"line":944},[764,2580,868],{"class":803},[764,2582,2583],{"class":871},"errors",[764,2585,841],{"class":803},[764,2587,844],{"class":803},[764,2589,2590],{"class":803}," [{",[764,2592,804],{"class":803},[764,2594,2483],{"class":927},[764,2596,841],{"class":803},[764,2598,844],{"class":803},[764,2600,804],{"class":803},[764,2602,2603],{"class":774},"pageTitle",[764,2605,841],{"class":803},[764,2607,2608],{"class":803},",",[764,2610,804],{"class":803},[764,2612,2283],{"class":927},[764,2614,841],{"class":803},[764,2616,844],{"class":803},[764,2618,804],{"class":803},[764,2620,2621],{"class":774},"Title is required",[764,2623,841],{"class":803},[764,2625,2608],{"class":803},[764,2627,804],{"class":803},[764,2629,872],{"class":927},[764,2631,841],{"class":803},[764,2633,844],{"class":803},[764,2635,804],{"class":803},[764,2637,2638],{"class":774},"required",[764,2640,841],{"class":803},[764,2642,2643],{"class":803}," }]\n",[764,2645,2646],{"class":766,"line":950},[764,2647,947],{"class":803},[764,2649,2650],{"class":766,"line":956},[764,2651,953],{"class":803},[764,2653,2654],{"class":766,"line":1199},[764,2655,959],{"class":803},[583,2657,2658],{},"Arguments that break a tool's own rules, such as a malformed slug or a meta title over its\nlength limit, are rejected before the tool runs, with a message naming the argument.",[583,2660,2661],{},"Some failures happen before any tool runs, and come back as plain HTTP errors:",[643,2663,2664,2674],{},[646,2665,2666],{},[649,2667,2668,2671],{},[652,2669,2670],{},"Status",[652,2672,2673],{},"Cause",[659,2675,2676,2686,2695,2714],{},[649,2677,2678,2683],{},[664,2679,2680],{},[627,2681,2682],{},"401",[664,2684,2685],{},"The key is missing, invalid, revoked or expired",[649,2687,2688,2692],{},[664,2689,2690],{},[627,2691,702],{},[664,2693,2694],{},"The key is a public or preview key; the endpoint needs a secret key",[649,2696,2697,2702],{},[664,2698,2699],{},[627,2700,2701],{},"406",[664,2703,2704,2705,2707,2708,2128,2711],{},"The request's ",[627,2706,1586],{}," header doesn't list both ",[627,2709,2710],{},"application\u002Fjson",[627,2712,2713],{},"text\u002Fevent-stream",[649,2715,2716,2721],{},[664,2717,2718],{},[627,2719,2720],{},"429",[664,2722,2723,2724,1887],{},"The key's rate limit is exhausted (see ",[587,2725,2727],{"href":2726},"#limits","Limits",[614,2729,2420],{"id":2730},"repeated-calls",[583,2732,2733],{},"Each tool handles a repeated call in the way that makes a retry after a dropped connection\nsafe:",[595,2735,2736,2750,2762,2779],{},[598,2737,2738,2741,2742,1775,2744,2746,2747,2749],{},[622,2739,2740],{},"Creates are deduplicated."," Call ",[627,2743,1857],{},[627,2745,1934],{},"\nagain with exactly the same arguments, from any key in the same project, and you get the\nfirst result back instead of a second page. A call that arrives while the first is still\nrunning gets ",[627,2748,2413],{},". Only a successful create is remembered, for 24 hours: if a create\nfails, retrying it runs it again, so it can succeed once the cause is fixed.",[598,2751,2752,2755,2756,2758,2759,2761],{},[622,2753,2754],{},"Updates always apply."," Sending the same update twice leaves the page as one update\nwould, and it is applied even if someone has edited the page since. An update that\noverlaps someone else's edit to the same page returns ",[627,2757,2413],{}," instead of undoing it:\nread the page again with ",[627,2760,1724],{}," and retry.",[598,2763,2764,2767,2768,2770,2771,2774,2775,1775,2777,2021],{},[622,2765,2766],{},"Publishing checks the page, not the call."," If the page's current draft is already live,\n",[627,2769,1919],{}," publishes nothing and returns ",[627,2772,2773],{},"alreadyPublished: true",". Otherwise it\npublishes, so publishing again after an edit, or after the page was unpublished, works.\nTwo publishes of the same page that overlap publish it once: the other returns\n",[627,2776,2773],{},[627,2778,2413],{},[598,2780,2781,2784,2785,2787],{},[622,2782,2783],{},"Uploads are not deduplicated."," Retrying ",[627,2786,1962],{}," uploads a second copy.",[614,2789,2727],{"id":2790},"limits",[583,2792,2793,2794,2797,2798,2800],{},"Every request to the MCP endpoint counts against the API key's write rate limit. That\nincludes read-only tools, and the requests a client makes when it connects and lists the\ntools. The allowance is shared with the same key's REST write requests. Uploads also count\nagainst the media upload limit. See ",[587,2795,30],{"href":2796},"..\u002Fapi\u002Flimits-and-errors#rate-limits","\nfor both figures. An agent working quickly through a long task can reach them. When it does,\ncalls fail with ",[627,2799,2720],{}," until the window resets.",[583,2802,2803],{},"Use a separate key for each agent or integration, so one cannot use up another's allowance.",[614,2805,2807],{"id":2806},"what-gets-recorded","What gets recorded",[595,2809,2810,2816,2844],{},[598,2811,2812,2815],{},[622,2813,2814],{},"Audit log."," Changes made over MCP are recorded in the project's audit log against the\nAPI key that made them.",[598,2817,2818,2821,2822,886,2825,1747,2828,1747,2831,886,2834,2128,2837,2840,2841,2021],{},[622,2819,2820],{},"Webhooks."," Writes fire the same webhooks as the REST API: ",[627,2823,2824],{},"page.created",[627,2826,2827],{},"page.updated",[627,2829,2830],{},"page.published",[627,2832,2833],{},"collection_item.created",[627,2835,2836],{},"collection_item.published",[627,2838,2839],{},"media.uploaded",". See ",[587,2842,62],{"href":2843},"..\u002Fapi\u002Fwebhooks",[598,2845,2846,2849],{},[622,2847,2848],{},"API usage."," Requests appear in the key's usage alongside its REST requests.",[583,2851,2852,2853,2855],{},"To cut an agent off, revoke its key under ",[622,2854,633],{},". Revocation can take up to\na minute to reach every region.",[614,2857,2859],{"id":2858},"not-available-over-mcp","Not available over MCP",[583,2861,2862,2863,2867],{},"The following need the ",[587,2864,2866],{"href":2865},"..\u002Fapi\u002Foverview","REST API"," or the admin:",[595,2869,2870,2873,2876,2879,2882],{},[598,2871,2872],{},"reading one collection item's full content",[598,2874,2875],{},"updating, publishing or deleting collection items",[598,2877,2878],{},"unpublishing or deleting pages",[598,2880,2881],{},"blog posts, categories and tags",[598,2883,2884],{},"listing or editing existing media",[2886,2887,2888],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":728,"searchDepth":797,"depth":797,"links":2890},[2891,2892,2893,2901,2906,2907,2913,2914,2915,2916,2917],{"id":616,"depth":797,"text":617},{"id":717,"depth":797,"text":718},{"id":749,"depth":797,"text":750,"children":2894},[2895,2896,2897,2898,2899,2900],{"id":754,"depth":850,"text":755},{"id":969,"depth":850,"text":970},{"id":1076,"depth":850,"text":1077},{"id":1309,"depth":850,"text":1310},{"id":1500,"depth":850,"text":1501},{"id":1507,"depth":850,"text":1508},{"id":1594,"depth":797,"text":1595,"children":2902},[2903,2904,2905],{"id":1601,"depth":850,"text":1602},{"id":1702,"depth":850,"text":1703},{"id":1834,"depth":850,"text":1835},{"id":1983,"depth":797,"text":1984},{"id":2042,"depth":797,"text":2043,"children":2908},[2909,2910,2911,2912],{"id":1873,"depth":850,"text":2046},{"id":2107,"depth":850,"text":2108},{"id":1876,"depth":850,"text":2202},{"id":2242,"depth":850,"text":681},{"id":2273,"depth":797,"text":2274},{"id":2730,"depth":797,"text":2420},{"id":2790,"depth":797,"text":2727},{"id":2806,"depth":797,"text":2807},{"id":2858,"depth":797,"text":2859},"Connect Claude Code, Cursor, VS Code or another MCP client to a TentoCMS project, so an agent can read its schemas and write content.","md",{},true,{"title":101,"description":2918},"vOgFo0vF57luU3vgurw5h4kvqlxs4ibUsMfkKtIu9d0",[2925,2927],{"title":97,"path":98,"stem":99,"description":2926,"children":-1},"Step-by-step migration of a ButterCMS application to TentoCMS.",{"title":105,"path":106,"stem":107,"description":2928,"children":-1},"Migrating content from other CMS platforms using the built-in migration tools.",1793119044416]