mcpField
A
agri-ja 日本の農業政策・補助金・米の概算金

agri-ja 日本の農業政策・補助金・米の概算金

远程服务
agri-ja.net法律与政务03 周前更新

关于 agri-ja 日本の農業政策・補助金・米の概算金

面向日本农业信息的文件式媒体网站与发布流程,支持以文件管理文章。它还提供 MCP 端点,供 AI Agent 搜索文章并查询稻米预付款和补助信息。

主要功能

  1. 01文件式文章管理
  2. 02从 PDF 到文章的暂存流程
  3. 03生成文章索引 CSV
  4. 04基于 Git 的发布流程
  5. 05日本农业 MCP 工具

适用场景

  1. 01根据源 PDF 编写文章
  2. 02发布前检查并暂存文章
  3. 03通过 Git 发布文章更新
  4. 04查询稻米预付款和补助

MCP 相关

只读的 `/mcp` 端点提供 `search_articles`、`get_article`、`rice_advance_payment` 和 `find_subsidy` 四个工具。它读取网站内容与数据,返回文章摘要、摘录和 URL,而非全文。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://agri-ja.net/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

4
参数类型必填说明
limitinteger否最大条数(默认 8,上限 20)
querystring是搜索关键词(例如:概算金 秋田 / 收入保险 缺点)

详细介绍

農業情報メディア(nogyo-media)

Next.js 15(App Router)+ TypeScript + Tailwind CSS v4 で構築した農業情報メディアの静的サイトです。記事本文は content/articles/*.md の frontmatter と HTML 本文で管理します。Git リモートは GitHub を想定しています(Vercel の Git 連携とも相性がよいです)。

メディア方針・未決バックログ・SEOメモは docs/メディア方針と実装メモ.md にまとめています(実装・運用時の参照用)。

はじめての公開まで(ほぼ自動)

ターミナルでこのフォルダに移動できる前提です。あなたが用意するのは 名前・メール・GitHub のトークン だけです(トークンは GitHub に一度も載せない でください)。

  1. 設定ファイルを作る(例にコピーして編集)

    cd nogyo-media
    cp setup.secrets.env.example setup.secrets.env
    

    setup.secrets.env を開き、GIT_USER_NAME・GIT_USER_EMAIL・GH_TOKEN を埋めます。

    • GH_TOKEN … GitHub → Settings → Developer settings → Personal access tokens で作成(リポジトリへの push ができる権限が必要です)。
    • トークンの代わりに GitHub CLI で gh auth login 済みなら、GH_TOKEN を空にしても push できます。
  2. 初回の Git 設定・コミット・GitHub へ push を一括実行

    npm run setup:first-push
    
  3. (任意)Vercel をトークンだけで先に本番に出す
    setup.secrets.env に VERCEL_TOKEN=...(Vercel → Account Settings → Tokens)を追加し:

    npm run setup:vercel
    
  4. push のたびに自動で本番更新したい場合(おすすめ)
    Vercel で New Project → さきほどの GitHub リポジトリを Import(Root Directory は空のまま)。これで 2回目以降は git push だけでデプロイされます。

注意: setup.secrets.env は .gitignore 済みです。絶対にコミット・共有しないでください。 漏れたらトークンはすぐ無効化し、作り直してください。

記事化開始→確認→WEB公開(標準フロー)

microCMS は使わず、ファイルベースのみで公開します。

0) 元PDFを置く

記事作成/記事化入力/ に元PDFを置きます。

1) チャット指示で記事化開始(またはコマンド)

チャットで「このPDFを記事化開始」と指示するか、nogyo-media で次を実行します。

npm run article:start -- "../記事化入力/<ファイル名>.pdf"

実行すると次が作られます。

  • 記事/元資料/記事と元資料/<ファイル名>/
  • 同フォルダ内に元PDFコピー
  • 同フォルダ内に <ファイル名>_解説記事.html(雛形)
  • 同フォルダ内に <ファイル名>_作業メモ.md
2) 記事を作成して確認する

記事/元資料/記事と元資料/<ファイル名>/<ファイル名>_解説記事.html を完成させ、内容を確認します。

補足:

  • ページ上部の タイトル / 日付 / タグ / 読了目安 / 目次 / 共有操作 はサイト側で共通表示されます。
  • HTML本文側では <article> 内に本文を記述し、<h1> や先頭 <header> は原則不要です(重複表示を避けるため)。
  • 記事生成時のルールは docs/記事生成プロンプト.md を必ず参照してください。
  • data:image / Base64画像 / SVGの data URI はそのまま公開しません。Google が読む HTML を極端に肥大化させるため、公開時には外部画像へ変換・軽量化します。
3) 確認OK後にWEB用ファイルを生成する
npm run article:stage -- "../記事/元資料/記事と元資料/<ファイル名>" <slug>

例:

npm run article:stage -- "../記事/元資料/記事と元資料/25_物流革新に向けた取組の推進" logistics-innovation-promotion

このコマンドで次を作成/更新します。

  • content/source-html/<slug>.html
  • content/articles/<slug>.md(sourceHtmlFile 参照型)

補足:

  • stage-article-for-web.sh は、HTML 内の data:image やローカル画像を public/article-images/<slug>/ に書き出し、HTML の src を公開用パスへ差し替えます。
  • CSS の url(data:...) は変換対象外のため、含まれている場合はエラーで停止します。
  • 図版そのものは禁止ではありません。禁止しているのは HTML への画像バイナリ埋め込みを、そのまま公開すること です。
  • 公開図版は PNG を既定とします(prepare-article-assets.py)。AVIF は環境によってデコードされず真っ白になることがあるため、public/article-images/**/*.avif と source-html 内の .avif 参照は npm run build 前の検証で失敗します。
  • PDF・公式スライドの図版は、スライド内の一部を切り抜かず、該当ページ(スライド)を1枚まるごと画像化して掲載します(1 PDF ページ=原則 1 画像)。再現用に scripts/render-pdf-page-to-png.py(要 pymupdf)があります。
4) 最後に公開する(手動)

公開は コミット と push の2段階に分かれています。article:publish はコミットまでで止まり、push しません。

npm run article:publish -- <slug>   # 1記事=1コミット。push はしない
npm run article:push -- --dry       # 溜まっているコミットの内容を表示(push しない)
npm run article:push                # その日の分をまとめて1回だけ push

publish-article.sh は content/articles/<slug>.md に加えて、sourceHtmlFile が指定されている場合は対応する content/source-html/*.html も一緒にコミットします。あわせて 記事一覧 CSV(public/articles-index.csv)も再生成してコミットし、最後に未 push のコミット数を表示します。

push は1日1回にまとめてください。 Vercel の課金は読者のアクセス量ではなく push 回数(ビルドCPU時間) でほぼ決まります(1 push ≈ $0.14、Pro の月間クレジットは $20)。記事を3本出す日も、コミットを3つ積んでから最後に npm run article:push を1回だけ実行します。「1記事=1コミット」は revert しやすさのために維持し、push だけをまとめるのが原則です。使い切るとサイトが停止します(2026-08-10 に実際に3日22時間停止)。

なお push を実行してよいのは、ユーザーから「push して」「公開して」と明示的に指示があったときだけです。指示がなければコミットまでで止め、「公開待ち」として報告します。

push したら、その場で台帳とVercelを確認する

push は「投げて終わり」にしません。次の2つを push 直後に必ず済ませます。

  1. 本番反映を確認する。 ローカルの npm run build が通っても本番に出たとは限りません。クエリを付けないプレーンな本番URLで、記事・図版・sitemap 掲載を確認します(?cb= などを付けるとキャッシュやルーティングが変わり「未反映」と誤判定します)。デプロイが数時間生成されないことが実際にあります。
  2. 運営/公開キュー.tsv の該当行を更新する。 状態を 承認待ち → 公開済 にし、公開コミット 列にコミットハッシュを入れます。

2 を飛ばすと、push は済んでいるのに台帳では「承認待ち」のままという行が溜まり、次に誰かが見たとき「まだ公開されていない記事」に見えます。2026-08-25 の棚卸しでは、この形のずれが3件見つかりました(うち1件は、コミットされないまま作業ツリーに4日間残っていた変更)。台帳はコミット直後ではなく push 直後に更新してください。コミットしただけの段階では、まだ公開されていないためです。

文章列表 CSV(标题・URL・发布日期)

以 标题 / URL / 发布日期 3 列输出首页、新内容、分类、标签的中心页面,以及所有已发布文章(中心页面的发布日期列为空)。

项目内容
文件public/articles-index.csv
线上 URLhttps://agri-ja.net/articles-index.csv
手动更新npm run articles:csv

自动更新时机

  • npm run article:publish … 发布文章时,也会将 CSV 一并加入同一提交
  • npm run build … Vercel 部署前也会重新生成(即使忘记 push,线上 CSV 也会更新到最新)

文章的源数据是 content/articles/*.md 的 frontmatter(title / slug / publishedAt)。文章 URL 的格式为 /articles/<slug>。

本地启动

cd nogyo-media
npm install
npm run dev

在浏览器中打开 http://localhost:3000。

生产构建:

npm run build
npm start

部署到 Vercel

  1. 将本仓库推送到 GitHub(或 GitLab / Bitbucket)。
  2. 登录 Vercel,通过「New Project」导入对应仓库。
  3. 如果直接部署本仓库,Root Directory 留空(或填写 .)即可。只有在父文件夹包含多个项目的 monorepo 中,才需要指定 nogyo-media 等子文件夹。
  4. 框架会自动检测为 Next.js。直接部署即可。

目前仅使用基于文件的文章,因此不需要环境变量。可在 Vercel 的项目设置中添加域名或预览 URL。

首次与后续操作
时机你需要做的事自动执行的操作
首次按照上文「首次发布前的准备」准备好 setup.secrets.env,然后运行 npm run setup:first-push。为了自动部署,还要在 Vercel 中 Import 仓库(或通过 npm run setup:vercel 使用 CLI 部署)。setup:first-push 会自动完成提交并推送到 GitHub。
后续修改文章或代码,然后只需执行 git push。Vercel 会自动构建并部署到线上(如果是拉取请求,也会自动生成预览 URL)。GitHub Actions(.github/workflows/ci.yml)会运行 npm run lint 和 npm run build,若失败则会显示红色状态。
依赖库无需特别操作(也可以选择审阅并合并 Dependabot 的 PR)。Dependabot(.github/dependabot.yml)每周会创建更新建议 PR。

可在 GitHub 仓库的 Actions 标签页查看「CI」工作流是否成功。在 Vercel 控制面板中也能查看每次部署的日志。

关于 microCMS

目前的标准运营方式不使用 microCMS。
通过 content/articles 和 content/source-html 以文件方式管理并发布。

即使启用了 microCMS,每篇文章的 tags 中也必须包含 1~3 个读者标签,否则构建会失败。

MCP 服务(面向 AI Agent 的公开端点)

通过 https://agri-ja.net/mcp,将文章和公开数据作为 MCP(Model Context Protocol) 工具提供。实际实现仅包含 app/mcp/route.ts 这一个文件。

  • 只读,无需身份验证。同一 URL 同时支持 MCP 2026-07-28(无状态)和 2025 系列 Streamable HTTP。
  • 共 4 个工具:search_articles / get_article / rice_advance_payment / find_subsidy
  • 不会返回完整文章正文,仅提供「要点+开头摘录+URL」。这样可以在 AI 的回答中包含来源 URL,并让读者能够访问网站。
  • 数据源与文章及站内工具相同(content/)。发布文章后,MCP 端也会自动更新。
  • /mcp 是运行时唯一会读取 content/ 的路由,请勿将其从 next.config.ts 的 outputFileTracingIncludes 中移除(否则线上会出现 ENOENT)。

使用方法(提供说明时):只需将 https://agri-ja.net/mcp 添加到 Claude / ChatGPT / Cursor 的「自定义连接器」中。也可通过 /llms.txt 查看相关信息。

统计:通过 MCP 产生的使用情况不会显示在 GA4 或 Search Console 中。Vercel 的 Function Logs 中的 [mcp] <method> <status> <ms> 是唯一的统计点。

官方注册表(registry.modelcontextprotocol.io)

已以 net.agri-ja/agri-ja 的名称注册(2026-08-07・status active)。命名空间通过 agri-ja.net 域名验证(HTTP 方式) 获取,而非通过 GitHub。

  • 公钥:public/mcp-registry-auth → 通过 next.config.ts 的 rewrites,以 /.well-known/mcp-registry-auth 的形式提供(Vercel 不会提供 public/ 目录下的点目录,因此直接放入 public/.well-known/ 会导致线上返回 404)
  • 私钥:~/.config/mcp-registry/agri-ja-key.pem 和 agri-ja-privkey.hex(位于仓库外。不要提交)
  • CLI:~/.local/bin/mcp-publisher

添加或修改工具后,提升 server.json 的 version 并重新发布:

cd nogyo-media
~/.local/bin/mcp-publisher validate
~/.local/bin/mcp-publisher login http --domain agri-ja.net --private-key "$(cat ~/.config/mcp-registry/agri-ja-privkey.hex)"
~/.local/bin/mcp-publisher publish
curl -s "https://registry.modelcontextprotocol.io/v0.1/servers?search=agri-ja"

确认运行情况(本地):

curl -s -X POST http://localhost:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

目录概览

  • app/ — App Router 页面与布局
  • components/ — 页眉、主视觉区、卡片、侧边栏
  • content/articles/ — 文章 Markdown(frontmatter + HTML 正文)
  • lib/articles.ts — 文章数据层
  • lib/categories.ts / lib/tags.ts — 分类、读者标签、主题标签的规范词汇(THEME_TAG_REGISTRY)

文章的 tags 中必须包含 1~3 个读者标签(生産者向け / 小売向け / 流通向け / 消費者向け)。主题标签需从 docs/theme-tags.md 的规范词汇中选择 0~3 个。使用未登记标签或读者标签数量不符合要求时,构建会报错。

新文章的主题标签建议:python3 scripts/suggest-theme-tags.py <slug> <category>

许可证

供私有项目使用。内容著作权请遵循各来源的规定。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。