{"id":194,"date":"2026-02-17T18:40:29","date_gmt":"2026-02-17T17:40:29","guid":{"rendered":"https:\/\/helloblog.io\/cs\/wordpress-mcp-adapter-abilities-api-model-context-protocol\/"},"modified":"2026-02-17T18:40:29","modified_gmt":"2026-02-17T17:40:29","slug":"wordpress-mcp-adapter-abilities-api-model-context-protocol","status":"publish","type":"post","link":"https:\/\/helloblog.io\/cs\/wordpress-mcp-adapter-abilities-api-model-context-protocol\/","title":{"rendered":"WordPress MCP Adapter: jak napojit Abilities API na AI klienty p\u0159es Model Context Protocol"},"content":{"rendered":"\n<p>WordPress se posledn\u00ed m\u011bs\u00edce docela rychle posouv\u00e1 sm\u011brem k automatizaci a AI workflow. Kl\u00ed\u010dovou zm\u011bnou je Abilities API (p\u0159edstaven\u00e9 ve WordPressu 6.9), kter\u00e9 d\u00e1v\u00e1 v\u00fdvoj\u00e1\u0159\u016fm jednotn\u00fd zp\u016fsob, jak \u201ezaregistrovat, popsat a spustit\u201c konkr\u00e9tn\u00ed funkcionalitu \u2013 typovan\u011b, objeviteln\u00e9 a nap\u0159\u00ed\u010d kontexty (PHP, JavaScript i REST API). Na to te\u010f navazuje WordPress MCP Adapter, kter\u00fd tyto abilities zp\u0159\u00edstupn\u00ed AI klient\u016fm p\u0159es Model Context Protocol (MCP).<\/p>\n\n\n\n<p>V tomhle \u010dl\u00e1nku projdeme kompletn\u00ed praktickou cestu: instalaci MCP Adapteru, zp\u0159\u00edstupn\u011bn\u00ed abilities pro v\u00fdchoz\u00ed MCP server, konfiguraci p\u0159ipojen\u00ed v Claude Desktop, Cursor, Claude Code a VS Code (v\u010detn\u011b STDIO a HTTP transportu), pou\u017eit\u00ed MCP tools a tak\u00e9 vytvo\u0159en\u00ed vlastn\u00edho MCP serveru p\u0159\u00edmo v pluginu. Na konci p\u0159id\u00e1m bezpe\u010dnostn\u00ed checklist, proto\u017ee MCP klient je v praxi \u201ep\u0159ihl\u00e1\u0161en\u00fd u\u017eivatel\u201c ve WordPressu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rychl\u00e9 opakov\u00e1n\u00ed: pro\u010d jsou Abilities z\u00e1klad<\/h2>\n\n\n\n<p>Abilities API p\u0159in\u00e1\u0161\u00ed do WordPressu funk\u010dn\u00ed API prvn\u00ed t\u0159\u00eddy: m\u00edsto ad\u2011hoc REST endpoint\u016f, custom admin-ajax akc\u00ed nebo r\u016fzn\u00fdch intern\u00edch helper\u016f m\u016f\u017ee\u0161 jednu schopnost (ability) definovat jednou a konzistentn\u011b ji nab\u00eddnout dal\u0161\u00edm \u010d\u00e1stem syst\u00e9mu.<\/p>\n\n\n\n<p>Ability se definuje pomoc\u00ed n\u011bkolika pevn\u00fdch prvk\u016f:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Unik\u00e1tn\u00ed n\u00e1zev ve form\u00e1tu <code>namespace\/ability-name<\/code>.<\/li>\n\n\n<li>Typovan\u00e9 sch\u00e9ma vstupu (<em>input schema<\/em>) a v\u00fdstupu (<em>output schema<\/em>).<\/li>\n\n\n<li><code>permission_callback<\/code>, kter\u00fd vynucuje opr\u00e1vn\u011bn\u00ed (capabilities).<\/li>\n\n\n<li><code>execute_callback<\/code>, kter\u00fd provede samotnou pr\u00e1ci.<\/li>\n\n<\/ul>\n\n\n\n<p>To, co se spou\u0161t\u00ed v <code>execute_callback<\/code>, m\u016f\u017ee b\u00fdt prakticky cokoliv: na\u010dten\u00ed dat, \u00faprava p\u0159\u00edsp\u011bvk\u016f, diagnostika, reporty \u2013 zkr\u00e1tka jedna jasn\u011b vymezen\u00e1 jednotka pr\u00e1ce.<\/p>\n\n\n\n<p>Jakmile je ability zaregistrovan\u00e1, je objeviteln\u00e9 a spustiteln\u00e9 z PHP, JavaScriptu i p\u0159es REST API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">V\u00fdchoz\u00ed abilities ve WordPressu 6.9<\/h3>\n\n\n\n<p>WordPress 6.9 obsahuje t\u0159i defaultn\u00ed core abilities. Nejsou jich des\u00edtky, ale na testov\u00e1n\u00ed MCP Adapteru bohat\u011b sta\u010d\u00ed:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>core\/get-site-info<\/code>: vrac\u00ed informace o webu nastaven\u00e9 ve WordPressu. Defaultn\u011b v\u0161echny fieldy, p\u0159\u00edpadn\u011b jen vybran\u00fd subset.<\/li>\n\n\n<li><code>core\/get-user-info<\/code>: vrac\u00ed z\u00e1kladn\u00ed profilov\u00e9 informace o aktu\u00e1ln\u011b autentizovan\u00e9m u\u017eivateli \u2013 pro personalizaci, audit i chov\u00e1n\u00ed z\u00e1visl\u00e9 na p\u0159\u00edstupu.<\/li>\n\n\n<li><code>core\/get-environment-info<\/code>: vrac\u00ed informace o runtime prost\u0159ed\u00ed pro diagnostiku a kompatibilitu (prost\u0159ed\u00ed, PHP runtime, DB server, verze WordPressu).<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Co je WordPress MCP Adapter a k \u010demu je dobr\u00fd<\/h2>\n\n\n\n<p>WordPress MCP Adapter je ofici\u00e1ln\u00ed bal\u00ed\u010dek v iniciativ\u011b <em>AI Building Blocks for WordPress<\/em>. Jeho \u00fakolem je \u201ep\u0159elo\u017eit\u201c abilities registrovan\u00e9 p\u0159es Abilities API do primitiv, kter\u00e1 ch\u00e1pe Model Context Protocol (MCP) \u2013 a t\u00edm zp\u0159\u00edstupnit funkce webu AI agent\u016fm jako <strong>MCP tools<\/strong> a data jako <strong>MCP resources<\/strong>.<\/p>\n\n\n\n<p>Praktick\u00fd dopad je jednoduch\u00fd: pokud u\u017e dnes v pluginu registruje\u0161 abilities, jsi velmi bl\u00edzko tomu, aby je AI klient um\u011bl objevit a zavolat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Z\u00e1kladn\u00ed pojmy MCP: tools, resources, prompts<\/h3>\n\n\n\n<p>MCP organizuje interakce do t\u0159\u00ed \u201eprimitiv\u201c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Tools<\/strong>: spustiteln\u00e9 funkce, kter\u00e9 AI vol\u00e1, kdy\u017e m\u00e1 n\u011bco ud\u011blat (akce).<\/li>\n\n\n<li><strong>Resources<\/strong>: pasivn\u00ed zdroje dat, kter\u00e9 si AI jen \u010dte jako kontext (soubory, \u0159\u00e1dky v DB, exporty apod.).<\/li>\n\n\n<li><strong>Prompts<\/strong>: p\u0159edp\u0159ipraven\u00e9 \u0161ablony, kter\u00e9 vedou konkr\u00e9tn\u00ed workflow.<\/li>\n\n<\/ul>\n\n\n\n<p>V kontextu MCP Adapteru se abilities typicky mapuj\u00ed na <strong>tools<\/strong>, proto\u017ee reprezentuj\u00ed spustitelnou logiku (na\u010dti, spo\u010d\u00edtej, aktualizuj, diagnostikuj). Adapter je ale flexibiln\u00ed: pokud je ability \u010dist\u011b read\u2011only a vrac\u00ed jen data (nap\u0159. statick\u00e1 konfigurace, debug log), d\u00e1 se nakonfigurovat i jako <strong>resource<\/strong>, aby si AI mohla data \u201enas\u00e1t\u201c jako background kontext bez aktivn\u00edho vol\u00e1n\u00ed.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalace MCP Adapteru jako plugin (nejrychlej\u0161\u00ed start)<\/h2>\n\n\n\n<p>Nejrychlej\u0161\u00ed cesta je st\u00e1hnout a nainstalovat MCP Adapter jako plugin p\u0159\u00edmo z GitHub Releases: <a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\/releases\">https:\/\/github.com\/WordPress\/mcp-adapter\/releases<\/a>. Po aktivaci plugin automaticky zaregistruje v\u00fdchoz\u00ed MCP server s n\u00e1zvem <code>mcp-adapter-default-server<\/code> a p\u0159id\u00e1 t\u0159i vlastn\u00ed abilities:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>mcp-adapter\/discover-abilities<\/code><\/li>\n\n\n<li><code>mcp-adapter\/get-ability-info<\/code><\/li>\n\n\n<li><code>mcp-adapter\/execute-ability<\/code><\/li>\n\n<\/ul>\n\n\n\n<p>Tyto abilities se z\u00e1rove\u0148 automaticky vystav\u00ed jako MCP tools:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>mcp-adapter-discover-abilities<\/code><\/li>\n\n\n<li><code>mcp-adapter-get-ability-info<\/code><\/li>\n\n\n<li><code>mcp-adapter-execute-ability<\/code><\/li>\n\n<\/ul>\n\n\n\n<p>Dohromady d\u00e1vaj\u00ed AI agent\u016fm \u201evrstven\u00fd\u201c p\u0159\u00edstup k abilities: nejd\u0159\u00edv objev, co existuje, pak si vy\u017e\u00e1dej detaily a nakonec konkr\u00e9tn\u00ed ability spus\u0165.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak zp\u0159\u00edstupnit abilities pro v\u00fdchoz\u00ed MCP server<\/h2>\n\n\n\n<p>V\u00fdchoz\u00ed server MCP Adapteru je z\u00e1m\u011brn\u011b konzervativn\u00ed: abilities jsou p\u0159es n\u011bj dostupn\u00e9 jen tehdy, kdy\u017e je p\u0159i registraci explicitn\u011b ozna\u010d\u00ed\u0161 jako ve\u0159ejn\u00e9 pro MCP. D\u011bl\u00e1 se to pomoc\u00ed flagu <code>meta.mcp.public<\/code> v argumentech <code>wp_register_ability()<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>'meta' =&gt; array(\n    'mcp' =&gt; array(\n        'public' =&gt; true,  \/\/ Required for MCP default server access\n    ),\n)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#9ECBFF\">'meta'<\/span><span style=\"color:#F97583\"> =><\/span><span style=\"color:#79B8FF\"> array<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    'mcp'<\/span><span style=\"color:#F97583\"> =><\/span><span style=\"color:#79B8FF\"> array<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'public'<\/span><span style=\"color:#F97583\"> =><\/span><span style=\"color:#79B8FF\"> true<\/span><span style=\"color:#E1E4E8\">,  <\/span><span style=\"color:#6A737D\">\/\/ Required for MCP default server access<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    ),<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>U core abilities (ty t\u0159i z WordPressu 6.9) je logicky nechce\u0161 p\u0159episovat v core. M\u00edsto toho se to \u0159e\u0161\u00ed filtrem <code>wp_register_ability_args<\/code>, kde uprav\u00ed\u0161 registra\u010dn\u00ed argumenty a dopln\u00ed\u0161 <code>meta.mcp.public<\/code> jen pro vybran\u00e9 ability:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&lt;?php\n\/**\n * Plugin Name: Enable core abilities\n * Version: 1.0.0\n *\n * @package enable-core-abilities\n *\/\n\nadd_filter( 'wp_register_ability_args', 'myplugin_enable_core_abilities_mcp_access', 10, 2 );\n\/**\n * Enable MCP access for core abilities.\n *\n * @param array  $args         Ability registration arguments.\n * @param string $ability_name Ability ID.\n * @return array Modified ability registration arguments.\n *\/\nfunction myplugin_enable_core_abilities_mcp_access( array $args, string $ability_name ) {\n    \/\/ Enable MCP access for the three current core abilities.\n    $core_abilities = array(\n        'core\/get-site-info',\n        'core\/get-user-info',\n        'core\/get-environment-info',\n    );\n\n    if ( in_array( $ability_name, $core_abilities, true ) ) {\n        $args['meta']['mcp']['public'] = true;\n    }\n\n    return $args;\n}\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">&#x3C;?<\/span><span style=\"color:#79B8FF\">php<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/**<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * Plugin Name: Enable core abilities<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * Version: 1.0.0<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@package<\/span><span style=\"color:#6A737D\"> enable-core-abilities<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">add_filter<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'wp_register_ability_args'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">'myplugin_enable_core_abilities_mcp_access'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#79B8FF\">10<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#79B8FF\">2<\/span><span style=\"color:#E1E4E8\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/**<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * Enable MCP access for core abilities.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@param<\/span><span style=\"color:#F97583\"> array<\/span><span style=\"color:#6A737D\">  $args         Ability registration arguments.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@param<\/span><span style=\"color:#F97583\"> string<\/span><span style=\"color:#6A737D\"> $ability_name Ability ID.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@return<\/span><span style=\"color:#F97583\"> array<\/span><span style=\"color:#6A737D\"> Modified ability registration arguments.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">function<\/span><span style=\"color:#B392F0\"> myplugin_enable_core_abilities_mcp_access<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#F97583\">array<\/span><span style=\"color:#E1E4E8\"> $args, <\/span><span style=\"color:#F97583\">string<\/span><span style=\"color:#E1E4E8\"> $ability_name ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ Enable MCP access for the three current core abilities.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $core_abilities <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> array<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'core\/get-site-info'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'core\/get-user-info'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'core\/get-environment-info'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#79B8FF\">in_array<\/span><span style=\"color:#E1E4E8\">( $ability_name, $core_abilities, <\/span><span style=\"color:#79B8FF\">true<\/span><span style=\"color:#E1E4E8\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        $args[<\/span><span style=\"color:#9ECBFF\">'meta'<\/span><span style=\"color:#E1E4E8\">][<\/span><span style=\"color:#9ECBFF\">'mcp'<\/span><span style=\"color:#E1E4E8\">][<\/span><span style=\"color:#9ECBFF\">'public'<\/span><span style=\"color:#E1E4E8\">] <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> true<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    return<\/span><span style=\"color:#E1E4E8\"> $args;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Jakmile tohle zapne\u0161, m\u016f\u017ee\u0161 za\u010d\u00edt p\u0159ipojovat AI klienty a volat core abilities p\u0159es MCP tools v\u00fdchoz\u00edho serveru.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">P\u0159ipojen\u00ed AI aplikac\u00ed: STDIO vs HTTP transport<\/h2>\n\n\n\n<p>MCP podporuje dv\u011b transportn\u00ed vrstvy: <strong>STDIO<\/strong> a <strong>HTTP<\/strong>. Volba se typicky odv\u00edj\u00ed od toho, kde WordPress b\u011b\u017e\u00ed a jak se k n\u011bmu chce\u0161 p\u0159ipojit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">STDIO: ide\u00e1ln\u00ed pro lok\u00e1ln\u00ed v\u00fdvoj<\/h3>\n\n\n\n<p>Pro lok\u00e1ln\u00ed WordPress prost\u0159ed\u00ed (Studio, Docker, Lando, LocalWP\u2026) je nejp\u0159\u00edmo\u010da\u0159ej\u0161\u00ed <strong>STDIO<\/strong>. MCP Adapter to \u0159e\u0161\u00ed p\u0159es <a href=\"https:\/\/wp-cli.org\/\">WP-CLI<\/a>, tak\u017ee pot\u0159ebuje\u0161 m\u00edt WP-CLI nainstalovan\u00e9 lok\u00e1ln\u011b.<\/p>\n\n\n\n<p>Minimum konfigurace pro p\u0159ipojen\u00ed vypad\u00e1 takhle:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&quot;wordpress-mcp-server&quot;: {\n  &quot;command&quot;: &quot;wp&quot;,\n  &quot;args&quot;: [\n    &quot;--path=\/path\/to\/your\/wordpress\/installation&quot;,\n    &quot;mcp-adapter&quot;,\n    &quot;serve&quot;,\n    &quot;--server=mcp-adapter-default-server&quot;,\n    &quot;--user={admin_user}&quot;\n  ]\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#9ECBFF\">\"wordpress-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"--path=\/path\/to\/your\/wordpress\/installation\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"mcp-adapter\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"serve\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"--server=mcp-adapter-default-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">    \"--user={admin_user}\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  ]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Co je d\u016fle\u017eit\u00e9:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>N\u00e1zev serveru (<code>wordpress-mcp-server<\/code>) je jen lok\u00e1ln\u00ed label \u2013 m\u016f\u017ee b\u00fdt libovoln\u00fd.<\/li>\n\n\n<li><code>command<\/code> je <code>wp<\/code> (WP-CLI).<\/li>\n\n\n<li><code>--path<\/code> ukazuje na instalaci WordPressu.<\/li>\n\n\n<li><code>mcp-adapter serve<\/code> spou\u0161t\u00ed MCP server.<\/li>\n\n\n<li><code>--server<\/code> vyb\u00edr\u00e1 konkr\u00e9tn\u00ed MCP server (tady default).<\/li>\n\n\n<li><code>--user<\/code> ur\u010duje, jako kter\u00fd WordPress u\u017eivatel se klient autentizuje (typicky admin v devu).<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">HTTP: pro ve\u0159ejn\u011b dostupn\u00e9 instalace (a kdy\u017e nechce\u0161 STDIO)<\/h3>\n\n\n\n<p>Pro ve\u0159ejn\u011b dostupn\u00e9 weby, p\u0159\u00edpadn\u011b kdy\u017e nechce\u0161 STDIO, se pou\u017e\u00edv\u00e1 <strong>HTTP<\/strong>. Praktick\u00e1 cesta je remote proxy bal\u00ed\u010dek <a href=\"https:\/\/www.npmjs.com\/package\/@automattic\/mcp-wordpress-remote\"><code>@automattic\/mcp-wordpress-remote<\/code><\/a>. Ten vy\u017eaduje m\u00edt na stroji <a href=\"https:\/\/nodejs.org\/en\">Node.js<\/a> a vy\u0159e\u0161enou autentizaci \u2013 bu\u010f p\u0159es WordPress <em>application passwords<\/em>, nebo vlastn\u00ed OAuth.<\/p>\n\n\n\n<p>Minimum konfigurace pro HTTP transport:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&quot;wordpress-mcp-server&quot;: {\n  &quot;command&quot;: &quot;npx&quot;,\n  &quot;args&quot;: [&quot;-y&quot;, &quot;@automattic\/mcp-wordpress-remote@latest&quot;],\n  &quot;env&quot;: {\n    &quot;WP_API_URL&quot;: &quot;https:\/\/yoursite.example\/wp-json\/mcp\/mcp-adapter-default-server&quot;,\n    &quot;WP_API_USERNAME&quot;: &quot;{admin_user}&quot;,\n    &quot;WP_API_PASSWORD&quot;: &quot;{application-password}&quot;\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#9ECBFF\">\"wordpress-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"npx\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><span style=\"color:#9ECBFF\">\"-y\"<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">\"@automattic\/mcp-wordpress-remote@latest\"<\/span><span style=\"color:#E1E4E8\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"env\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"WP_API_URL\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"https:\/\/yoursite.example\/wp-json\/mcp\/mcp-adapter-default-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"WP_API_USERNAME\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"{admin_user}\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"WP_API_PASSWORD\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"{application-password}\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Pozn\u00e1mky ke konfiguraci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>command<\/code> je <code>npx<\/code>, kter\u00fd spust\u00ed Node.js bal\u00ed\u010dek.<\/li>\n\n\n<li><code>-y<\/code> automaticky odsouhlas\u00ed instalaci bal\u00ed\u010dku.<\/li>\n\n\n<li><code>WP_API_URL<\/code> m\u00ed\u0159\u00ed na MCP endpoint ve WordPressu.<\/li>\n\n\n<li><code>WP_API_USERNAME<\/code> a <code>WP_API_PASSWORD<\/code> jsou p\u0159ihla\u0161ovac\u00ed \u00fadaje (u password jde o application password).<\/li>\n\n<\/ul>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Lok\u00e1ln\u00ed HTTP a typick\u00e9 pot\u00ed\u017ee<\/h4>\n\n\n<p>P\u0159i lok\u00e1ln\u00edm p\u0159ipojen\u00ed p\u0159es remote proxy se ob\u010das \u0159e\u0161\u00ed konflikty v\u00edce verz\u00ed Node.js nebo lok\u00e1ln\u00ed SSL certifik\u00e1ty. Bal\u00ed\u010dek m\u00e1 troubleshooting: https:\/\/github.com\/Automattic\/mcp-wordpress-remote\/blob\/trunk\/Docs\/troubleshooting.md<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Konfigurace pro konkr\u00e9tn\u00ed aplikace (Claude Desktop, Cursor, Claude Code, VS Code)<\/h2>\n\n\n\n<p>Konfigura\u010dn\u00ed form\u00e1t je v z\u00e1sad\u011b stejn\u00fd, li\u0161\u00ed se jen m\u00edsto, kam ho ulo\u017e\u00ed\u0161, a u VS Code i n\u00e1zev root objektu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Claude Desktop<\/h3>\n\n\n\n<p>V Claude Desktop p\u0159ejdi do <strong>Developer<\/strong> sekce (Claude \u2192 Settings \u2192 Developer). V \u010d\u00e1sti Local MCP servers klikni na <strong>Edit config<\/strong> \u2013 otev\u0159e se <code>claude_desktop_config.json<\/code>.<\/p>\n\n\n\n<p>MCP servery se definuj\u00ed do objektu <code>mcpServers<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;mcpServers&quot;: {\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"mcpServers\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>P\u0159\u00edklad pro STDIO transport:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;mcpServers&quot;: {\n    &quot;wordpress-mcp-server&quot;: {\n      &quot;command&quot;: &quot;wp&quot;,\n      &quot;args&quot;: [\n        &quot;--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp&quot;,\n        &quot;mcp-adapter&quot;,\n        &quot;serve&quot;,\n        &quot;--server=mcp-adapter-default-server&quot;,\n        &quot;--user=admin&quot;\n      ]\n    }\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"mcpServers\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wordpress-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"mcp-adapter\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"serve\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--server=mcp-adapter-default-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--user=admin\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      ]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>P\u0159\u00edklad pro HTTP transport:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;mcpServers&quot;: {\n    &quot;wordpress-mcp-server&quot;: {\n      &quot;command&quot;: &quot;npx&quot;,\n      &quot;args&quot;: [&quot;-y&quot;, &quot;@automattic\/mcp-wordpress-remote@latest&quot;],\n      &quot;env&quot;: {\n        &quot;WP_API_URL&quot;: &quot;http:\/\/localhost:8885\/wp-json\/mcp\/mcp-adapter-default-server&quot;,\n        &quot;WP_API_USERNAME&quot;: &quot;admin&quot;,\n        &quot;WP_API_PASSWORD&quot;: &quot;2SEB qW5j D7CW fpsh pbmN RGva&quot;\n      }\n    }\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"mcpServers\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wordpress-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"npx\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><span style=\"color:#9ECBFF\">\"-y\"<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">\"@automattic\/mcp-wordpress-remote@latest\"<\/span><span style=\"color:#E1E4E8\">],<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"env\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        \"WP_API_URL\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"http:\/\/localhost:8885\/wp-json\/mcp\/mcp-adapter-default-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        \"WP_API_USERNAME\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"admin\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        \"WP_API_PASSWORD\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"2SEB qW5j D7CW fpsh pbmN RGva\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Po ulo\u017een\u00ed konfigurace je nutn\u00e9 Claude Desktop restartovat \u2013 konfigurace MCP server\u016f se na\u010d\u00edt\u00e1 jen p\u0159i startu. V Developer z\u00e1lo\u017ece pak uvid\u00ed\u0161 server v seznamu Local MCP servers; pokud je u n\u011bj status <code>running<\/code>, m\u016f\u017ee\u0161 ho pou\u017e\u00edvat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cursor<\/h3>\n\n\n\n<p>V Cursor otev\u0159i Settings (Cursor \u2192 Settings \u2192 Cursor Settings) a sekci <strong>Tools and MCP<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1603\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-scaled.png\" alt=\"Nastaven\u00ed Tools and MCP v editoru Cursor\" class=\"wp-image-192\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-300x188.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-1024x641.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-768x481.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-1536x962.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-2048x1283.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-04-cursor-400x251.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\"><em>Forr\u00e1s: WordPress Developer Blog<\/em><\/figcaption><\/figure>\n\n\n\n<p>Klikni na <strong>Add Custom MCP<\/strong> \u2013 Cursor otev\u0159e konfigura\u010dn\u00ed soubor <code>mcp.json<\/code>. Form\u00e1t konfigurace je stejn\u00fd jako u Claude Desktop. Po ulo\u017een\u00ed se vra\u0165 do Tools and MCP a server by se m\u011bl objevit v seznamu, kde ho m\u016f\u017ee\u0161 povolit pro session.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1603\" src=\"https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-scaled.png\" alt=\"Cursor Tools and MCP s p\u0159idan\u00fdm WordPress MCP serverem\" class=\"wp-image-193\" srcset=\"https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-scaled.png 2560w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-300x188.png 300w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-1024x641.png 1024w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-768x481.png 768w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-1536x962.png 1536w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-2048x1283.png 2048w, https:\/\/helloblog.io\/app\/uploads\/sites\/11\/2026\/02\/mcp-05-cursor-mcp-400x251.png 400w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption class=\"wp-element-caption\"><em>Forr\u00e1s: WordPress Developer Blog<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Claude Code<\/h3>\n\n\n\n<p>U Claude Code m\u00e1\u0161 dv\u011b mo\u017enosti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>P\u0159idat objekt <code>mcpServers<\/code> do <code>.claude.json<\/code> v home directory (glob\u00e1ln\u011b pro v\u0161echny projekty).<\/li>\n\n\n<li>Vytvo\u0159it <code>.mcp.json<\/code> p\u0159\u00edmo v adres\u00e1\u0159i projektu (konfigurace per\u2011projekt).<\/li>\n\n<\/ul>\n\n\n\n<p>V obou p\u0159\u00edpadech pou\u017eije\u0161 stejn\u00fd konfigura\u010dn\u00ed form\u00e1t jako u Cursor nebo Claude Desktop.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">VS Code<\/h3>\n\n\n\n<p>Ve VS Code je pot\u0159eba vytvo\u0159it JSON konfiguraci popisuj\u00edc\u00ed MCP server podle dokumentace: https:\/\/code.visualstudio.com\/docs\/copilot\/customization\/mcp-servers. Typicky se soubor jmenuje <code>mcp.json<\/code> a pat\u0159\u00ed do <code>.vscode<\/code> adres\u00e1\u0159e v workspace.<\/p>\n\n\n\n<p>Rozd\u00edl proti Claude Desktop\/Cursor je, \u017ee servery se nedefinuj\u00ed v <code>mcpServers<\/code>, ale v objektu <code>servers<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;servers&quot;: {\n    \/\/ MCP server definitions go here\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"servers\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ MCP server definitions go here<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Po vytvo\u0159en\u00ed souboru VS Code zobraz\u00ed MCP control toolbar, kde server startuje\u0161\/stopuje\u0161\/restartuje\u0161. Kdy\u017e se server nastartuje spr\u00e1vn\u011b, VS Code obvykle uk\u00e1\u017ee i po\u010det dostupn\u00fdch tools.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pou\u017eit\u00ed MCP tools v praxi<\/h2>\n\n\n\n<p>Jakmile je MCP server p\u0159ipojen\u00fd, m\u016f\u017ee\u0161 v AI aplikaci za\u010d\u00edt pou\u017e\u00edvat tools, kter\u00e9 MCP Adapter vystavuje.<\/p>\n\n\n\n<p>Typick\u00fd sc\u00e9n\u00e1\u0159 t\u0159eba v Claude Desktop: nap\u00ed\u0161e\u0161 po\u017eadavek typu \u201eGet the site info from my WordPress site\u201c. Claude si v\u0161imne dostupn\u00e9ho MCP serveru a zpravidla nejd\u0159\u00edv zavol\u00e1 tool <code>mcp-adapter-discover-abilities<\/code>, aby zjistil, jak\u00e9 abilities jsou k dispozici. Pak vybere vhodnou ability (nap\u0159. <code>core\/get-site-info<\/code>) a provede vol\u00e1n\u00ed p\u0159es <code>mcp-adapter-execute-ability<\/code> s p\u0159edan\u00fdm n\u00e1zvem ability. V\u00fdsledkem jsou data o webu, kter\u00e1 AI pou\u017eije k odpov\u011bdi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vlastn\u00ed MCP server p\u0159\u00edmo v pluginu (v\u00edc kontroly ne\u017e default)<\/h2>\n\n\n\n<p>Defaultn\u00ed MCP server pokryje hodn\u011b use\u2011cas\u016f, ale n\u011bkdy chce\u0161 m\u00edt nad vystaven\u00edm abilities jako MCP tools v\u011bt\u0161\u00ed kontrolu. Typicky: plugin nab\u00edz\u00ed jen konkr\u00e9tn\u00ed sadu tools, nechce\u0161 \u0159e\u0161it <code>meta.mcp.public<\/code>, nebo chce\u0161 vlastn\u00ed chov\u00e1n\u00ed kolem transportu\/logov\u00e1n\u00ed\/observability.<\/p>\n\n\n\n<p>V takov\u00e9m p\u0159\u00edpad\u011b MCP Adapter nep\u0159id\u00e1v\u00e1\u0161 jako plugin, ale jako Composer z\u00e1vislost v pluginu a vytvo\u0159\u00ed\u0161 si vlastn\u00ed MCP server.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Instalace bal\u00ed\u010dku p\u0159es Composer<\/h3>\n\n\n\n<p>V adres\u00e1\u0159i pluginu spus\u0165:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer require wordpress\/mcp-adapter\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> require<\/span><span style=\"color:#9ECBFF\"> wordpress\/mcp-adapter<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Na\u010dten\u00ed Composer autoloaderu<\/h3>\n\n\n\n<p>V hlavn\u00edm souboru pluginu na\u010dti <code>vendor\/autoload.php<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if ( file_exists( __DIR__ . '\/vendor\/autoload.php' ) ) {\n    require_once __DIR__ . '\/vendor\/autoload.php';\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#79B8FF\">file_exists<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#79B8FF\">__DIR__<\/span><span style=\"color:#F97583\"> .<\/span><span style=\"color:#9ECBFF\"> '\/vendor\/autoload.php'<\/span><span style=\"color:#E1E4E8\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    require_once<\/span><span style=\"color:#79B8FF\"> __DIR__<\/span><span style=\"color:#F97583\"> .<\/span><span style=\"color:#9ECBFF\"> '\/vendor\/autoload.php'<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Pozor na konflikty verz\u00ed z\u00e1vislost\u00ed<\/h4>\n\n\n<p>Pokud na webu m\u016f\u017ee b\u00fdt v\u00edc plugin\u016f z\u00e1visl\u00fdch na MCP Adapteru nebo Abilities API, doporu\u010duje se Jetpack Autoloader, aby se p\u0159ede\u0161lo konflikt\u016fm verz\u00ed: https:\/\/github.com\/WordPress\/mcp-adapter\/blob\/trunk\/docs\/getting-started\/installation.md#using-jetpack-autoloader-highly-recommended<\/p>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Inicializace MCP Adapteru<\/h3>\n\n\n\n<p>Nejd\u0159\u00edv ov\u011b\u0159, \u017ee je t\u0159\u00edda k dispozici, a pak inicializuj adapter (spolu s default serverem):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {\n    \/\/ check if the MCP Adapter class is available, if not show some sort of error or admin notice\n    return;\n}\n\n\/\/ Initialize MCP Adapter and its default server.\nWPMCPCoreMcpAdapter::instance();\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#F97583\">!<\/span><span style=\"color:#79B8FF\"> class_exists<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#79B8FF\">WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">    \/\/ check if the MCP Adapter class is available, if not show some sort of error or admin notice<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    return<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ Initialize MCP Adapter and its default server.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::<\/span><span style=\"color:#B392F0\">instance<\/span><span style=\"color:#E1E4E8\">();<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4) Vytvo\u0159en\u00ed a registrace vlastn\u00edho MCP serveru<\/h3>\n\n\n\n<p>Vlastn\u00ed server vytvo\u0159\u00ed\u0161 hookem na akci <code>mcp_adapter_init<\/code>. Callback dostane instanci <code>McpAdapter<\/code> a p\u0159es <code>create_server()<\/code> nadefinuje\u0161 server v\u010detn\u011b toho, jak\u00e9 abilities se maj\u00ed vystavit jako tools (a p\u0159\u00edpadn\u011b resources a prompts):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>add_action( 'mcp_adapter_init', 'myplugin_create_custom_mcp_server' );\nfunction myplugin_create_custom_mcp_server( $adapter ) {\n    $adapter = WPMCPCoreMcpAdapter::instance();\n    $adapter-&gt;create_server(\n        'custom-mcp-server', \/\/ Unique server identifier.\n        'custom-mcp-server', \/\/ REST API namespace.\n        'mcp',               \/\/ REST API route.\n        'Custom MCP Server', \/\/ Server name.\n        'Custom MCP Server', \/\/ Server description.\n        'v1.0.0',            \/\/ Server version.\n        array(               \/\/ Transport methods.\n            WPMCPTransportHttpTransport::class,  \/\/ Recommended: MCP 2025-06-18 compliant.\n        ),\n        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class, \/\/ Error handler.\n        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class, \/\/ Observability handler.\n        array( 'namespace\/ability-name' ), \/\/ Abilities to expose as tools\n        array(),                           \/\/ Resources (optional).\n        array(),                           \/\/ Prompts (optional).\n    );\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">add_action<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'mcp_adapter_init'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">'myplugin_create_custom_mcp_server'<\/span><span style=\"color:#E1E4E8\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">function<\/span><span style=\"color:#B392F0\"> myplugin_create_custom_mcp_server<\/span><span style=\"color:#E1E4E8\">( $adapter ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $adapter <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::<\/span><span style=\"color:#B392F0\">instance<\/span><span style=\"color:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $adapter<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">create_server<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'custom-mcp-server'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ Unique server identifier.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'custom-mcp-server'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ REST API namespace.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'mcp'<\/span><span style=\"color:#E1E4E8\">,               <\/span><span style=\"color:#6A737D\">\/\/ REST API route.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'Custom MCP Server'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ Server name.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'Custom MCP Server'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ Server description.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'v1.0.0'<\/span><span style=\"color:#E1E4E8\">,            <\/span><span style=\"color:#6A737D\">\/\/ Server version.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">(               <\/span><span style=\"color:#6A737D\">\/\/ Transport methods.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">            WPMCPTransportHttpTransport<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">,  <\/span><span style=\"color:#6A737D\">\/\/ Recommended: MCP 2025-06-18 compliant.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ Error handler.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#6A737D\">\/\/ Observability handler.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'namespace\/ability-name'<\/span><span style=\"color:#E1E4E8\"> ), <\/span><span style=\"color:#6A737D\">\/\/ Abilities to expose as tools<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">(),                           <\/span><span style=\"color:#6A737D\">\/\/ Resources (optional).<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">(),                           <\/span><span style=\"color:#6A737D\">\/\/ Prompts (optional).<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Parametry, kter\u00e9 se v praxi \u0159e\u0161\u00ed nej\u010dast\u011bji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>1. parametr: unik\u00e1tn\u00ed identifik\u00e1tor serveru (pou\u017eije se t\u0159eba p\u0159i startu p\u0159es WP-CLI).<\/li>\n\n\n<li>2. + 3. parametr: REST API namespace a route pro MCP server.<\/li>\n\n\n<li>4. + 5. parametr: n\u00e1zev a popis serveru (uvid\u00ed\u0161 v AI aplikaci p\u0159i v\u00fdpisu server\u016f).<\/li>\n\n\n<li>6. parametr: verze serveru.<\/li>\n\n\n<li>10. parametr: pole n\u00e1zv\u016f abilities, kter\u00e9 chce\u0161 vystavit jako MCP tools (m\u016f\u017ee jich b\u00fdt v\u00edc).<\/li>\n\n\n<li>Zbytek: transportn\u00ed metody, error handling a observability handlery \u2013 m\u016f\u017ee\u0161 pou\u017e\u00edt ty z bal\u00ed\u010dku, nebo napsat vlastn\u00ed napojen\u00ed na intern\u00ed logging\/monitoring.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Uk\u00e1zka: p\u0159id\u00e1n\u00ed vlastn\u00edho MCP serveru do pluginu List All URLs<\/h2>\n\n\n\n<p>Aby bylo vid\u011bt, jak to vypad\u00e1 na re\u00e1ln\u00e9m pluginu, vezm\u011bme plugin List All URLs: https:\/\/github.com\/wptrainingteam\/list-all-urls. Nejprve je pot\u0159eba deaktivovat MCP Adapter plugin, pokud ho m\u00e1\u0161 zapnut\u00fd (v t\u00e9hle uk\u00e1zce pojedeme \u010dist\u011b composerov\u011b z pluginu).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Naklonov\u00e1n\u00ed repozit\u00e1\u0159e a p\u0159epnut\u00ed na v\u011btev s Abilities<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>cd wp-content\/plugins\ngit clone git@github.com:wptrainingteam\/list-all-urls.git\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#79B8FF\">cd<\/span><span style=\"color:#9ECBFF\"> wp-content\/plugins<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">git<\/span><span style=\"color:#9ECBFF\"> clone<\/span><span style=\"color:#9ECBFF\"> git@github.com:wptrainingteam\/list-all-urls.git<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>cd list-all-urls\ngit checkout abilities\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#79B8FF\">cd<\/span><span style=\"color:#9ECBFF\"> list-all-urls<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">git<\/span><span style=\"color:#9ECBFF\"> checkout<\/span><span style=\"color:#9ECBFF\"> abilities<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2) Instalace z\u00e1vislost\u00ed a p\u0159id\u00e1n\u00ed mcp-adapter<\/h3>\n\n\n\n<p>Plugin u\u017e pou\u017e\u00edv\u00e1 Composer, tak\u017ee nejd\u0159\u00edv:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer install\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> install<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>A pak p\u0159idej MCP Adapter:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>composer require wordpress\/mcp-adapter\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">composer<\/span><span style=\"color:#9ECBFF\"> require<\/span><span style=\"color:#9ECBFF\"> wordpress\/mcp-adapter<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3) Inicializace MCP Adapteru a vytvo\u0159en\u00ed custom serveru v list-all-urls.php<\/h3>\n\n\n\n<p>Otev\u0159i <code>list-all-urls.php<\/code> a na konec souboru p\u0159idej n\u00e1sleduj\u00edc\u00ed k\u00f3d:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {\n    return;\n}\n\n\/\/ Initialize MCP Adapter and its default server.\nWPMCPCoreMcpAdapter::instance();\n\nadd_action( 'mcp_adapter_init', 'list_all_urls_create_custom_mcp_server' );\n\/**\n * Create a custom MCP server for the List All URLs plugin.\n *\n * @param object $adapter WPMCPCoreMcpAdapter The MCP Adapter instance.\n * @return void\n *\/\nfunction list_all_urls_create_custom_mcp_server( $adapter ) {\n    $adapter = WPMCPCoreMcpAdapter::instance();\n    $adapter-&gt;create_server(\n        'list-all-urls-mcp-server',\n        'list-all-urls-mcp-server',\n        'mcp',\n        'List All URLS MCP Server',\n        'Custom MCP Server for the List All URLs plugin. Currently exposes only the list-all-urls\/urls ability as an MCP Tool.',\n        'v1.0.0',\n        array(\n            WPMCPTransportHttpTransport::class,\n        ),\n        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class,\n        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class,\n        array( 'list-all-urls\/urls' ),\n    );\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#F97583\">if<\/span><span style=\"color:#E1E4E8\"> ( <\/span><span style=\"color:#F97583\">!<\/span><span style=\"color:#79B8FF\"> class_exists<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#79B8FF\">WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\"> ) ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">    return<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/\/ Initialize MCP Adapter and its default server.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::<\/span><span style=\"color:#B392F0\">instance<\/span><span style=\"color:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">add_action<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'mcp_adapter_init'<\/span><span style=\"color:#E1E4E8\">, <\/span><span style=\"color:#9ECBFF\">'list_all_urls_create_custom_mcp_server'<\/span><span style=\"color:#E1E4E8\"> );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\">\/**<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * Create a custom MCP server for the List All URLs plugin.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@param<\/span><span style=\"color:#F97583\"> object<\/span><span style=\"color:#6A737D\"> $adapter WPMCPCoreMcpAdapter The MCP Adapter instance.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> * <\/span><span style=\"color:#F97583\">@return<\/span><span style=\"color:#F97583\"> void<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">function<\/span><span style=\"color:#B392F0\"> list_all_urls_create_custom_mcp_server<\/span><span style=\"color:#E1E4E8\">( $adapter ) {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $adapter <\/span><span style=\"color:#F97583\">=<\/span><span style=\"color:#79B8FF\"> WPMCPCoreMcpAdapter<\/span><span style=\"color:#F97583\">::<\/span><span style=\"color:#B392F0\">instance<\/span><span style=\"color:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    $adapter<\/span><span style=\"color:#F97583\">-><\/span><span style=\"color:#B392F0\">create_server<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'list-all-urls-mcp-server'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'list-all-urls-mcp-server'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'mcp'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'List All URLS MCP Server'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'Custom MCP Server for the List All URLs plugin. Currently exposes only the list-all-urls\/urls ability as an MCP Tool.'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        'v1.0.0'<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">            WPMCPTransportHttpTransport<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">        ),<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler<\/span><span style=\"color:#F97583\">::class<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">        array<\/span><span style=\"color:#E1E4E8\">( <\/span><span style=\"color:#9ECBFF\">'list-all-urls\/urls'<\/span><span style=\"color:#E1E4E8\"> ),<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    );<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Tady je d\u016fle\u017eit\u00e1 praktick\u00e1 drobnost: pro <code>list-all-urls\/urls<\/code> nemus\u00ed\u0161 nastavovat <code>meta.mcp.public<\/code>, proto\u017ee tu ability explicitn\u011b vystavuje\u0161 p\u0159es vlastn\u00ed MCP server.<\/p>\n\n\n\n<p>Te\u010f plugin aktivuj ve WordPress administraci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4) Konfigurace AI aplikace pro nov\u00fd server (p\u0159\u00edklad pro VS Code)<\/h3>\n\n\n\n<p>V AI klientovi jen p\u0159id\u00e1\u0161 dal\u0161\u00ed server do konfigurace. Tady je p\u0159\u00edklad <code>mcp.json<\/code> pro VS Code se dv\u011bma servery (default + custom z List All URLs), oba p\u0159es STDIO:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>{\n  &quot;servers&quot;: {\n    &quot;wordpress-mcp-server&quot;: {\n      &quot;command&quot;: &quot;wp&quot;,\n      &quot;args&quot;: [\n        &quot;--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp&quot;,\n        &quot;mcp-adapter&quot;,\n        &quot;serve&quot;,\n        &quot;--server=mcp-adapter-default-server&quot;,\n        &quot;--user=admin&quot;\n      ]\n    },\n    &quot;list-all-urls-mcp-server&quot;: {\n      &quot;command&quot;: &quot;wp&quot;,\n      &quot;args&quot;: [\n        &quot;--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp&quot;,\n        &quot;mcp-adapter&quot;,\n        &quot;serve&quot;,\n        &quot;--server=list-all-urls-mcp-server&quot;,\n        &quot;--user=admin&quot;\n      ]\n    }\n  }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">  \"servers\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"wordpress-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"mcp-adapter\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"serve\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--server=mcp-adapter-default-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--user=admin\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      ]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    },<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">    \"list-all-urls-mcp-server\"<\/span><span style=\"color:#E1E4E8\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"command\"<\/span><span style=\"color:#E1E4E8\">: <\/span><span style=\"color:#9ECBFF\">\"wp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#79B8FF\">      \"args\"<\/span><span style=\"color:#E1E4E8\">: [<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--path=\/Users\/jonathanbossenger\/Studio\/wordpress-mcp\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"mcp-adapter\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"serve\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--server=list-all-urls-mcp-server\"<\/span><span style=\"color:#E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color:#9ECBFF\">        \"--user=admin\"<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      ]<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>V jedn\u00e9 aplikaci m\u016f\u017ee\u0161 m\u00edt nakonfigurovan\u00fdch v\u00edce MCP server\u016f \u2013 a p\u0159ep\u00ednat mezi r\u016fzn\u00fdmi weby nebo pluginy, kter\u00e9 vystavuj\u00ed r\u016fzn\u00e9 sady abilities.<\/p>\n\n\n\n<p>Po zm\u011bn\u011b konfigurace nezapome\u0148 aplikaci restartovat, nebo MCP server znovu nastartovat p\u0159\u00edmo v UI (podle toho, jak se dan\u00fd klient chov\u00e1). Pak u\u017e m\u016f\u017ee\u0161 AI zadat t\u0159eba \u201eList all URLs on my WordPress site\u201c a klient zavol\u00e1 tool <code>list-all-urls-urls<\/code> p\u0159es MCP Adapter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bezpe\u010dnost a best practices (tohle nep\u0159eskakuj)<\/h2>\n\n\n\n<p>MCP klienti se v\u016f\u010di WordPressu chovaj\u00ed jako <strong>p\u0159ihl\u00e1\u0161en\u00ed u\u017eivatel\u00e9<\/strong>. Ber je proto jako sou\u010d\u00e1st aplika\u010dn\u00edho povrchu a dr\u017e se t\u011bchto pravidel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Pou\u017e\u00edvej <code>permission_callback<\/code> opravdu pe\u010dliv\u011b.<\/strong> Ka\u017ed\u00e1 ability m\u00e1 kontrolovat minim\u00e1ln\u00ed pot\u0159ebnou capability (<code>manage_options<\/code>, <code>edit_posts<\/code> atd.).<\/li>\n\n\n<li><strong>Vyhni se <code>__return_true<\/code> u destruktivn\u00edch operac\u00ed.<\/strong> Maz\u00e1n\u00ed obsahu, zm\u011bny nastaven\u00ed a podobn\u011b mus\u00ed m\u00edt striktn\u00ed autorizaci.<\/li>\n\n\n<li><strong>Pro MCP p\u0159\u00edstup pou\u017e\u00edvej dedikovan\u00e9 u\u017eivatele.<\/strong> Zejm\u00e9na v produkci je lep\u0161\u00ed separ\u00e1tn\u00ed user\/role s omezen\u00fdmi capabilities.<\/li>\n\n\n<li><strong>Nevystavuj \u201esiln\u00e9\u201c abilities neauditovan\u00fdm AI klient\u016fm.<\/strong> I kdy\u017e je to jen \u201epomocn\u00edk\u201c, po\u0159\u00e1d m\u016f\u017ee d\u011blat v\u011bci za u\u017eivatele.<\/li>\n\n\n<li><strong>Pro ve\u0159ejn\u00e9 HTTP endpointy preferuj read\u2011only abilities.<\/strong> Diagnostika, reporting, p\u0159\u00edstup k obsahu \u2013 a nic, co p\u0159episuje data, dokud nem\u00e1\u0161 vy\u0159e\u0161en\u00e9 bezpe\u010dnostn\u00ed procesy.<\/li>\n\n\n<li><strong>Kdy\u017e je pot\u0159eba, implementuj vlastn\u00ed autentizaci.<\/strong> Default je postaven\u00fd na application passwords, ale m\u016f\u017ee\u0161 j\u00edt cestou OAuth nebo jin\u00fdch metod.<\/li>\n\n\n<li><strong>Monitoruj a loguj pou\u017eit\u00ed.<\/strong> P\u0159es vlastn\u00ed error\/observability handlery se d\u00e1 napojit na logging\/monitoring stack.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Jak za\u010d\u00edt experimentovat je\u0161t\u011b dnes (minim\u00e1ln\u00ed \u201ehello AI\u201c cesta)<\/h2>\n\n\n\n<p>Na prvn\u00ed funk\u010dn\u00ed pokus v\u00fdvoj\u00e1\u0159i ve WordPressu sta\u010d\u00ed:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Zaregistrovat vlastn\u00ed ability (Abilities API).<\/li>\n\n\n<li>P\u0159idat MCP Adapter (pluginem nebo p\u0159es Composer) a inicializovat ho.<\/li>\n\n\n<li>P\u0159ipojit MCP\u2011aware AI klienta (Claude Desktop, Cursor, VS Code, Claude Code) p\u0159es STDIO nebo HTTP.<\/li>\n\n\n<li>Za\u010d\u00edt s p\u00e1r read\u2011only abilities jako MCP tools a postupn\u011b roz\u0161i\u0159ovat podle toho, jak roste d\u016fv\u011bra a zku\u0161enost.<\/li>\n\n<\/ol>\n\n\n\n<p>Pokud u\u017e m\u00e1\u0161 pluginy postaven\u00e9 na Abilities API, MCP Adapter z nich ud\u011bl\u00e1 AI\u2011ready API s minim\u00e1ln\u00ed dodate\u010dnou prac\u00ed. Pro dal\u0161\u00ed studium se hod\u00ed dokumentace Abilities API: https:\/\/developer.wordpress.org\/apis\/abilities\/ a repozit\u00e1\u0159 MCP Adapteru: https:\/\/github.com\/WordPress\/mcp-adapter.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Reference \/ Zdroje<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/developer.wordpress.org\/news\/2026\/02\/from-abilities-to-ai-agents-introducing-the-wordpress-mcp-adapter\/\" target=\"_blank\" rel=\"noopener noreferrer\">From Abilities to AI Agents: Introducing the WordPress MCP Adapter<\/a><\/li><li><a href=\"https:\/\/make.wordpress.org\/core\/2025\/11\/10\/abilities-api-in-wordpress-6-9\/\" target=\"_blank\" rel=\"noopener noreferrer\">Abilities API in WordPress 6.9<\/a><\/li><li><a href=\"https:\/\/developer.wordpress.org\/news\/2025\/11\/introducing-the-wordpress-abilities-api\/\" target=\"_blank\" rel=\"noopener noreferrer\">Introducing the WordPress Abilities API<\/a><\/li><li><a href=\"https:\/\/modelcontextprotocol.io\/docs\/getting-started\/intro\" target=\"_blank\" rel=\"noopener noreferrer\">Model Context Protocol docs<\/a><\/li><li><a href=\"https:\/\/make.wordpress.org\/ai\/2025\/07\/17\/mcp-adapter\/\" target=\"_blank\" rel=\"noopener noreferrer\">MCP Adapter<\/a><\/li><li><a href=\"https:\/\/make.wordpress.org\/ai\/2025\/07\/17\/ai-building-blocks\/\" target=\"_blank\" rel=\"noopener noreferrer\">AI Building Blocks for WordPress<\/a><\/li><li><a href=\"https:\/\/www.npmjs.com\/package\/@automattic\/mcp-wordpress-remote\" target=\"_blank\" rel=\"noopener noreferrer\">@automattic\/mcp-wordpress-remote<\/a><\/li><li><a href=\"https:\/\/make.wordpress.org\/core\/2020\/11\/05\/application-passwords-integration-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">Application Passwords Integration Guide<\/a><\/li><li><a href=\"https:\/\/code.visualstudio.com\/docs\/copilot\/customization\/mcp-servers\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code MCP servers documentation<\/a><\/li><li><a href=\"https:\/\/github.com\/wptrainingteam\/list-all-urls\" target=\"_blank\" rel=\"noopener noreferrer\">List All URLs plugin<\/a><\/li><li><a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress MCP Adapter documentation repository<\/a><\/li><li><a href=\"https:\/\/engineering.block.xyz\/blog\/build-mcp-tools-like-ogres-with-layers\" target=\"_blank\" rel=\"noopener noreferrer\">Build MCP tools like ogres with layers<\/a><\/li><li><a href=\"https:\/\/github.com\/Automattic\/mcp-wordpress-remote\/blob\/trunk\/Docs\/troubleshooting.md\" target=\"_blank\" rel=\"noopener noreferrer\">MCP remote proxy troubleshooting<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Abilities API ve WordPressu 6.9 standardizuje funkce webu do \u201espustiteln\u00fdch jednotek\u201c. MCP Adapter na tom stav\u00ed a umo\u017en\u00ed AI klient\u016fm tyto abilities bezpe\u010dn\u011b objevovat a volat jako MCP tools.<\/p>\n","protected":false},"author":34,"featured_media":191,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[29,48,125],"class_list":["post-194","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ekosystem-wordpress","tag-ai","tag-api","tag-plugins"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/posts\/194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/comments?post=194"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/media\/191"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/cs\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}