コンテンツにスキップ
EDERX
このページの内容

BlumeでブログをMCPサーバーにする。EDERXの設定と接続確認

BlumeのMCP、llms.txt、Markdown出力を有効にし、EDERXの記事をHermes Agentから検索・取得できるようにした設定と検証手順。

PR

Webサイトは、人がブラウザーで読むページだけを公開してきた。 検索エンジンはHTMLを巡回し、AIは検索結果や取得した本文から情報を読む。

そこへ、記事を直接検索してMarkdownで取得できるMCPサーバーを加えた。 EDERXでは、ブログ基盤のBlumeが持つAI向け機能を使い、公開記事をMCPクライアントから参照できるようにしている。

この記事では、EDERXで使っている設定と、記事を追加したときにMCP、llms.txt、sitemapを同じビルドから更新する方法を記録する。

MCPを追加した理由

Model Context Protocol(MCP)は、AIエージェントと外部のデータや機能を共通の方法で接続するためのプロトコルである。

ブログをMCPサーバーとして公開すると、MCPクライアントはサイト全体を毎回巡回しなくても、用意されたツールから記事を探して本文を取得できる。 EDERXのMCPは公開記事の読み取りに限定し、次の四つのツールを提供している。

ツール 用途
search_docs タイトル、説明、本文から記事を全文検索する
get_page 指定したページをMarkdownで取得する
list_pages 公開ページのURL、タイトル、説明を一覧する
get_navigation サイトのナビゲーション構造を取得する

MCPは検索エンジンを置き換えるものではない。 HTML、sitemap、構造化データ、RSSを維持したうえで、AIが公開情報へ到達する経路を一つ増やすものとして扱っている。

BlumeでMCPを有効にする

Blumeでは、blume.config.tsのai.mcpでMCPサーバーを有効にできる。 EDERXの基本設定は次の形である。

import { defineConfig } from "blume";

export default defineConfig({
  deployment: {
    output: "server",
    adapter: "node",
    site: "https://ederx.com",
  },
  ai: {
    llmsTxt: {
      enabled: true,
      openapi: false,
    },
    mcp: {
      enabled: true,
      route: "/mcp",
      name: "EDERX",
      instructions: "EDERXの記事を検索し、公開内容に基づいて回答してください。",
    },
  },
});

deployment.outputをserverにすると、BlumeはHTTPで利用できるMCPエンドポイントを生成する。 routeに指定した/mcpが接続先になる。

同時にai.llmsTxt.enabledを有効にすると、公開ページのタイトル、説明、URLをまとめたllms.txtと、本文を含むllms-full.txtも生成される。 詳細な設定項目はBlumeのAI configurationで確認できる。

公開ページをhiddenにしない

ここで一度、設定を誤った。

記事を画面上のサイドバーから外すため、frontmatterへ次の指定を入れていた。

sidebar:
  hidden: true

Blume 1.1.2では、この指定を持つページはサイドバーだけでなく、sitemap、RSS、llms.txt、llms-full.txtの生成対象からも除外される。 その結果、HTMLの記事は公開されているのに、sitemapにはトップと記事一覧しかなく、llms-full.txtにはサイト名と説明しか入っていなかった。

公開して検索対象にしたいページからsidebar.hiddenを外すと、Blumeが各ページを自動収集する。 サイドバーの見た目は、frontmatterで隠すのではなく、navigation.sidebarやCSSなど別の層で調整する。

デプロイナウ向けの構成

それまでは、Blumeの静的ファイルをNext.jsのRoute Handlerで配信し、MCPも同じサーバーに載せて公開していた。 ロリポップ!デプロイナウがAstroの@astrojs/nodeを実行できるようになったので、公開先をBlumeのサーバー出力へ戻した。

フレームワークはastro、アダプタのmodeはstandaloneである。 構成チェックは、package.jsonの依存関係にastroがあるかを見る。 Blumeが内部で同じAstroを使っていても、この依存を直接書いていないと公開前に止まる。 ビルド結果はdistに出て、サーバーの入口はdist/server/entry.mjsになる。

deployment.outputをserver、adapterをnodeにすると、HTML、Markdown、sitemap、RSS、llms.txt、llms-full.txtに加えて、MCPエンドポイントも同じビルドから生成する。 記事を追加したあとに、MCP用の一覧を別に更新する必要はない。

デプロイナウはリバースプロキシの背後でリクエストを渡す。 Astroのsecurity.allowedDomainsには、次のホストを入れている。

  • ederx.com
  • www.ederx.com
  • *.lolipop-now.app
  • *.preview.lolipop-now.app
  • localhost

この一覧に無いホストでは、フォームの送信が403になり、Astro.urlが公開しているURLと違う値になる。

Astro.sessionは使っていない。 @astrojs/nodeが既定で有効にするファイル保存を避けるため、driverはメモリにしている。

公開しているエンドポイント

EDERXでは、次のURLを公開している。

URL 内容
https://ederx.com/mcp Streamable HTTP形式のMCPサーバー
https://ederx.com/.well-known/mcp.json MCP discovery情報
https://ederx.com/.well-known/mcp/server-card.json サーバーカード
https://ederx.com/llms.txt 公開ページの索引
https://ederx.com/llms-full.txt 公開ページの本文を含む索引
https://ederx.com/agent-readability.json AI向け公開物の一覧

MCP discoveryを取得すると、サーバー名、接続URL、トランスポート、利用できるツールを接続前に確認できる。

curl https://ederx.com/.well-known/mcp.json

Hermes Agentから接続する

Hermes AgentのMCPドキュメントでは、リモートHTTP MCPサーバーをCLIから追加し、接続をテストできる。 EDERXを追加する場合は次のように指定する。

hermes mcp add ederx --url https://ederx.com/mcp
hermes mcp test ederx
hermes mcp list

接続後は、たとえば次のように依頼できる。

EDERXの記事から、Hermes Agentにつないでいるサービスを調べて。

Hermes Agentはsearch_docsで関連ページを探し、必要なページをget_pageで取得できる。 ツールを限定したい場合は、hermes mcp configure ederxで有効にするツールを選ぶ。

記事追加時に自動更新するもの

新しい記事には、最低限title、description、slug、type、date、authorsを設定する。

---
title: 記事のタイトル
description: 記事が扱う対象、方法、結果を一文で記述する。
slug: blog/example
type: blog
date: 2026-07-26
authors:
  - EDERX
---

ビルドが同じMarkdownを読み、次を更新する。

  • 記事ページのtitle、description、canonical URL
  • Open Graph画像とSNS向けメタデータ
  • JSON-LD構造化データ
  • sitemap.xml
  • robots.txtから参照するsitemap
  • /blog/rss.xml
  • llms.txtとllms-full.txt
  • ページ単位のMarkdown出力
  • MCPの検索対象とナビゲーション

SEOとAIOを別々の手作業にせず、記事のfrontmatterと本文を一つの正本にする。 そのうえで、HTMLを読む検索エンジン、フィードを読む購読者、MarkdownやMCPを使うAIへ、それぞれ適した形式を生成する。

公開情報だけを扱う

EDERXのMCPは認証なしで接続できる。 そのため、MCPへ渡すデータはWeb上ですでに公開してよい記事だけに限定する。

APIキー、アクセストークン、非公開メモ、下書き、個人情報をビルド対象へ混ぜない。 MCPツールにも書き込みや外部操作を持たせず、検索と取得だけに限定した。

AIが読みやすい入口を増やしても、公開してよい情報の境界は変わらない。 まず人が読める記事を整え、その同じ内容を機械にも一貫して渡す構成を維持していく。