[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"journal-post-sm-oauthserver-plugin-0-1-4":3},{"author":4,"categories":8,"content":13,"content_html":14,"created_at":15,"excerpt":16,"featured_image_url":13,"featured_images":17,"id":18,"is_pinned":19,"metadata":13,"next_post":20,"previous_post":24,"published":28,"published_at":29,"reading_time":6,"related_posts":30,"slug":31,"sources":13,"tags":32,"title":33,"translations":13,"updated_at":34},{"first_name":5,"id":6,"last_name":5,"login":7},"",1,"jakubzych@gmail.com",[9],{"id":10,"name":11,"slug":12},3,"Plugins","plugins",null,"\u003Ch2>Changed\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>MCP consent is stored per client.\n\u003Cul>\n\u003Cli>A later allow replaces the stored scopes instead of merging them.\u003C\u002Fli>\n\u003Cli>\u003Ccode>offline_access\u003C\u002Fcode> follows the issued code.\u003C\u002Fli>\n\u003Cli>Revoking a client deletes its unused MCP code.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>The authorizations list marks each client as \u003Ccode>mcp\u003C\u002Fcode> or \u003Ccode>oidc\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>The advertised MCP scope list comes from config. You can filter the declared member scopes, but the five fixed names always stay. An unknown name fails boot.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Upgrading\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>A migration creates one consent for each live MCP grant. Running it again changes nothing.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Requires SummerCMS v0.5.2 and sm-user-plugin v0.1.16.\u003C\u002Fp>\n","2026-10-28T22:31:22+00:00","Per-client MCP consent, client kinds and a configurable advertised scope list.",[],51,false,{"id":21,"slug":22,"title":23},50,"sm-user-plugin-0-1-16","sm-user-plugin 0.1.16",{"id":25,"slug":26,"title":27},47,"summercms-0-5-3","SummerCMS 0.5.3",true,"2026-10-28T15:39:11+00:00",[],"sm-oauthserver-plugin-0-1-4",[],"sm-oauthserver-plugin 0.1.4","2026-10-29T10:39:22+00:00"]