关于 agri-ja 日本の農業政策・補助金・米の概算金
面向日本农业信息的文件式媒体网站与发布流程,支持以文件管理文章。它还提供 MCP 端点,供 AI Agent 搜索文章并查询稻米预付款和补助信息。
主要功能
- 01文件式文章管理
- 02从 PDF 到文章的暂存流程
- 03生成文章索引 CSV
- 04基于 Git 的发布流程
- 05日本农业 MCP 工具
适用场景
- 01根据源 PDF 编写文章
- 02发布前检查并暂存文章
- 03通过 Git 发布文章更新
- 04查询稻米预付款和补助
MCP 相关
只读的 `/mcp` 端点提供 `search_articles`、`get_article`、`rice_advance_payment` 和 `find_subsidy` 四个工具。它读取网站内容与数据,返回文章摘要、摘录和 URL,而非全文。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://agri-ja.net/mcpclaude mcp add --transport http net-agri-ja-agri-ja https://agri-ja.net/mcp{"mcpServers":{"net-agri-ja-agri-ja":{"type":"http","url":"https://agri-ja.net/mcp"}}}在 Cursor 中打开{"servers":{"net-agri-ja-agri-ja":{"type":"http","url":"https://agri-ja.net/mcp"}}}在 VS Code 中打开{"mcpServers":{"net-agri-ja-agri-ja":{"type":"http","url":"https://agri-ja.net/mcp"}}}{"mcpServers":{"net-agri-ja-agri-ja":{"serverUrl":"https://agri-ja.net/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
4| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 最大条数(默认 8,上限 20) |
| query | string | 是 | 搜索关键词(例如:概算金 秋田 / 收入保险 缺点) |
详细介绍
農業情報メディア(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 に一度も載せない でください)。
-
設定ファイルを作る(例にコピーして編集)
cd nogyo-media cp setup.secrets.env.example setup.secrets.envsetup.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 できます。
-
初回の Git 設定・コミット・GitHub へ push を一括実行
npm run setup:first-push -
(任意)Vercel をトークンだけで先に本番に出す
setup.secrets.envにVERCEL_TOKEN=...(Vercel → Account Settings → Tokens)を追加し:npm run setup:vercel -
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>.htmlcontent/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 直後に必ず済ませます。
- 本番反映を確認する。 ローカルの
npm run buildが通っても本番に出たとは限りません。クエリを付けないプレーンな本番URLで、記事・図版・sitemap 掲載を確認します(?cb=などを付けるとキャッシュやルーティングが変わり「未反映」と誤判定します)。デプロイが数時間生成されないことが実際にあります。 運営/公開キュー.tsvの該当行を更新する。 状態を承認待ち→公開済にし、公開コミット列にコミットハッシュを入れます。
2 を飛ばすと、push は済んでいるのに台帳では「承認待ち」のままという行が溜まり、次に誰かが見たとき「まだ公開されていない記事」に見えます。2026-08-25 の棚卸しでは、この形のずれが3件見つかりました(うち1件は、コミットされないまま作業ツリーに4日間残っていた変更)。台帳はコミット直後ではなく push 直後に更新してください。コミットしただけの段階では、まだ公開されていないためです。
文章列表 CSV(标题・URL・发布日期)
以 标题 / URL / 发布日期 3 列输出首页、新内容、分类、标签的中心页面,以及所有已发布文章(中心页面的发布日期列为空)。
| 项目 | 内容 |
|---|---|
| 文件 | public/articles-index.csv |
| 线上 URL | https://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
- 将本仓库推送到 GitHub(或 GitLab / Bitbucket)。
- 登录 Vercel,通过「New Project」导入对应仓库。
- 如果直接部署本仓库,Root Directory 留空(或填写
.)即可。只有在父文件夹包含多个项目的 monorepo 中,才需要指定nogyo-media等子文件夹。 - 框架会自动检测为 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>
许可证
供私有项目使用。内容著作权请遵循各来源的规定。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。