ngt-mcp
by Cinnamobot
README.md
# NIC — Niigata Information Connector
## 導入: AI は、いま新潟の「インフラ」になる
**「チャッピーに聞いてみよう」——いま、そんな会話が当たり前になっています。**
ChatGPT(通称チャッピー)に気軽に質問する人が増え、旅行の計画も、お出かけ前の天気確認も、まず AI に聞く時代です。
もし、ここに**新潟に特化した AI** があればどうでしょう。
「新潟に何がある?」「今どこが楽しい?」——県外の若者がチャッピーに聞くだけで、新潟の魅力にたどり着ける。
**AI は新潟の経済に影響を与えられる存在になりつつあります**。
---
## 課題: いまの AI は、新潟の「今」に答えられない
新潟に特化した AI を作ろうとしても、現状の AI には 3 つの課題があります。
### 課題1: コストが高い
Web 検索で情報を得る場合、AI は検索結果の Web ページ全文を読み込むため、**トークンを大量に消費**します。
検索回数・トークンに比例してコストは膨らみ、**誰でも気軽に運用できる**値段ではありません。
### 課題2: 情報が正確ではない
- 検索結果は、GEO(Generative Engine Optimization)や AIO(AI Optimization)によって、
**AI に拾われやすいよう最適化されたコンテンツに誘導**され、情報自体が歪みます。
- 検索インデックスには遅延があり、「今まさに」の警報・雨・積雪には届きません。
- システムプロンプトで「新潟だけに絞れ」と指定しても、**ツール(検索)が返す結果自体が歪んでいては**、
新潟に特化した正確な AI にはなりません。
### 課題3: ガードレールがない
一般の AI に「新潟について教えて」と聞くと、**出典の曖昧な情報・古い情報・個人サイトの情報**まで
混ざって返ってきます。どこまでが確かな情報なのか、利用者には分かりません。
### 従来の AI のフロー(課題の全体像)
```mermaid
flowchart LR
A[ユーザー<br>「新潟で子供と遊べるところない?」] --> B[AI アシスタント]
B --> C{Web 検索}
C --> D[検索結果<br>・SEO/GEO 対策された広告記事<br>・閉店済み・移転済みの施設<br>・他所県の情報が混ざる]
D --> E[怪しい・古い場所を<br>そのまま回答]
E --> F[「この場所、本当にあるの?」<br>信頼できない回答]
style C fill:#f8d7da,stroke:#dc3545,color:#000
style D fill:#f8d7da,stroke:#dc3545,color:#000
style E fill:#f8d7da,stroke:#dc3545,color:#000
style F fill:#f8d7da,stroke:#dc3545,color:#000
```
ユーザーの質問から回答まで、**コスト・正確性・ガードレール**のすべての段階で問題が発生します。
---
## 提案: NIC — 新潟に特化した AI を作るデータ基盤
**NIC(Niigata Information Connector)** は、新潟の公式データ源(気象庁・新潟県・新潟市・国土交通省)に、
最適化されたフローで直接アクセスし、必要な情報だけを、最小のトークンで、リアルタイムに AI へ届けるデータ基盤です。
```
あなたのAIアシスタント(Claude / ChatGPT / Cursor など)
│ 「新潟の積雪は?」「十日町に警報は?」「雨の日のおすすめは?」
▼
┌─────────────────────────────────────┐
│ NIC(この基盤) │
│ ・新潟県の気象・防災・観光・統計データ │
│ ・出典明記つき・常に最新・高速キャッシュ│
└─────────────────────────────────────┘
│ 公式データ源(気象庁・新潟県・新潟市・国土交通省)
▼
新潟のリアルな今(実データ)
```
- **CLI(`ngt`)**: AI エージェントがシェルから新潟データを引くためのツール
- **MCP(`ngt-mcp`)**: 対応クライアントを増やすための標準インターフェース(Claude Desktop / Cursor 等)
新潟特化モデルの学習(高コスト・特定LLM依存)ではなく、**ツール提供(低コスト・全LLM対応)**で
「AI × 新潟」の課題を解決します。
---
## 解決: 3 つの課題が、すべて解決する
### NIC を使った AI のフロー(解決の全体像)
```mermaid
flowchart LR
A[ユーザー<br>「新潟で子供と遊べるところない?」] --> B[AI アシスタント]
B --> C[NIC<br>ngt tour / ngt search]
C --> D[公式データ源<br>新潟市オープンデータ・国土数値情報]
D --> E[実際に存在する施設だけ<br>(住所・電話付き)]
E --> F[「〇〇公園、△△市××。電話: 025-...」<br>信頼できる回答・出典明記]
style C fill:#d4edda,stroke:#28a745,color:#000
style D fill:#d4edda,stroke:#28a745,color:#000
style E fill:#d4edda,stroke:#28a745,color:#000
style F fill:#d4edda,stroke:#28a745,color:#000
```
ユーザーの質問から回答まで、**コスト・正確性・ガードレール**のすべての段階で問題が解消されます。
| 課題 | Web 検索 | NIC |
|---|---|---|
| コスト | ページ全文を読み**大量トークン消費** | 必要な値だけを**最小トークン**で返す |
| 正確性 | GEO/AIO で**結果が歪む**・インデックス遅延 | **公式データそのもの(一次情報)**・毎分更新 |
| ガードレール | 出典の曖昧な情報が混ざる | **公式データ源のみ**・出典を必ず明記 |
| 特化 | 他県の情報も混ざる | **新潟の公式データ源のみ** |
| リアルタイム性 | 検索インデックスは遅延あり | アメダス 10 分更新・警報 毎分更新 |
そして——なんなら、こういうメリットまであります。
- **新潟特化 AI を誰でも・低コストで提供できる**(モデル学習不要・ツール提供なので)
- **AI エージェントの道具として使える**(CLI はトークン効率が良く、決まったソースから決まった構造で値を受け取れる)
- **出典が常に付く**(公式データ源なので、どこから来た情報かが明確)
---
## 新潟を、AI で盛り上げよう
新潟特化 AI を誰でも提供できるようになれば、**チャッピーを通じて新潟の良さが若者に再発見され、
新潟の活性化につながります**。
観光も、防災も、情報発信も——新潟の「今」を AI につなぐ。
それが NIC の目指す、『AI × 新潟』の未来です。
---
## 実装: 2 言語のパッケージ(Monorepo)
導入・課題・提案のストーリーをそのままに、NIC は **Python 版と TypeScript 版の 2 言語で実装**されている。
| パッケージ | 言語 | 内容 | インストール |
|---|---|---|---|
| [`packages/py/`](packages/py/) | Python 3.13+ | SDK(ライブラリ)+ CLI + MCP | `uv sync` / `pip install` |
| [`packages/ts/`](packages/ts/) | TypeScript (Node 18+) | CLI + MCP(`npx` で実行可) | `npm install @cinnamobot/nic` |
同じコア設計(キャッシュ・エラー処理・出典管理を一元化)を 2 言語で提供する。
### Python 版(SDK としても利用可)
```bash
cd packages/py
uv sync
ngt weather --station 長岡 # CLI
ngt-mcp # MCP サーバー
```
```python
# ライブラリとしても利用可能
from nic.core.amedas import AmedasClient
with AmedasClient() as client:
data = client.fetch_precipitation(codes=["54232", "54841"])
```
### TypeScript 版(npm パッケージ `@cinnamobot/nic`)
**グローバルインストール(推奨・日常使い・AI エージェントのツールとして):**
```bash
npm install -g @cinnamobot/nic
# 以降、ターミナルでそのまま使える
ngt weather --station 長岡
ngt-mcp # MCP サーバー
```
**インストールせず npx で一時実行:**
```bash
# CLI(インストール不要)※ -p でパッケージ指定し、コマンド名 ngt を明示する
npx -y -p @cinnamobot/nic ngt weather --station 長岡
# MCP サーバー
npx -y -p @cinnamobot/nic ngt-mcp
```
**開発(リポジトリから):**
```bash
cd packages/ts
npm install
npm run build # tsc でビルド
npm test # vitest(52 テスト)
```
---
## データ源とライセンス
| データ源 | 内容 | ライセンス / 利用条件 |
|---|---|---|
| 気象庁「最新の気象データ」CSV | アメダス(積雪・気温・降水量) | 気象庁ウェブサイト利用規約(出典表示必須) |
| 気象庁防災情報XML配信 | 警報・注意報電文(VPWW53/VPWW54) | 公共データ利用規約 第1.0版 |
| 新潟県オープンデータ | データセット一覧・人口・道の駅 | 新潟県オープンデータ利用規約(出典表示) |
| 新潟市オープンデータ | 観光入込客数・温泉GIS・観光データセット | クリエイティブ・コモンズ 表示(CC-BY) |
| 国土数値情報(国土交通省) | 集客施設 P33(2014年度版) | 国土数値情報利用約款(出典明記で無償利用可) |
- 本ツール(NIC)自体は **MIT License** で公開。
- 取得・表示するデータの権利は各データ源に帰属し、各利用条件に従う必要がある。
- 本ツールの出力(CLI / MCP)には必ず出典が含まれており、各データ源の利用条件(出典表示)を満たすことを意図している。
各パッケージの詳細(コマンドリファレンス・データカバレッジ・セットアップ)は
[`packages/py/README.md`](packages/py/README.md) と [`packages/ts/README.md`](packages/ts/README.md) を参照。
## 開発
```bash
# Python 版
cd packages/py && uv sync && uv run pytest
# TypeScript 版
cd packages/ts && npm install && npm test
```
ブランチ運用: `main`(本番)← `develop`(開発)← `feature/*`(作業)
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues