1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

15分でMCPサーバーを作ってみた

1
Last updated at Posted at 2026-02-08

概要・目的

Fast MCPでAWS のRSSをキーワード検索できる Python スクリプトを作成します。
CLI から search_aws_updates を呼んで、アップデート情報(タイトル/リンク/概要)を返せる状態がゴールです。

手順

適当なPythonプロジェクトを作成。

image.png

仮想環境を作って依存を入れる

source .venv/bin/activate
pip install -U pip
pip install mcp

aws_updates.py にMCPの実体を作成

import argparse
import json
import urllib.request
import xml.etree.ElementTree as ET
from typing import List, Dict

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("AWSアップデート検索")


def _search_aws_updates_impl(keyword: str, max_results: int = 3) -> List[Dict[str, str]]:
    if not keyword or not keyword.strip():
        return []

    max_results = max(1, min(int(max_results), 20))

    req = urllib.request.Request(
        "https://aws.amazon.com/jp/new/feed/",
        headers={"User-Agent": "aws-updates-mcp/1.0"},
    )

    with urllib.request.urlopen(req, timeout=15) as response:
        root = ET.fromstring(response.read())

    results: List[Dict[str, str]] = []
    key = keyword.lower()

    for item in root.findall(".//item"):
        title = (item.findtext("title") or "").strip()
        link = (item.findtext("link") or "").strip()
        description = (item.findtext("description") or "").strip()

        if key in title.lower() or key in description.lower():
            results.append({"title": title, "link": link, "description": description})

        if len(results) >= max_results:
            break

    return results


@mcp.tool()
def search_aws_updates(keyword: str, max_results: int = 3) -> List[Dict[str, str]]:
    """AWSのアップデートをキーワードで検索し、結果を返す。"""
    return _search_aws_updates_impl(keyword, max_results)


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--mcp", action="store_true", help="MCPサーバーとして起動(stdio)")
    parser.add_argument("--keyword", type=str, help="CLIで検索するキーワード")
    parser.add_argument("--max-results", type=int, default=3, help="CLIで返す最大件数")
    args = parser.parse_args()

    if args.mcp:
        mcp.run()
        return

    # CLI動作確認用(MCPなし)
    if args.keyword:
        results = _search_aws_updates_impl(args.keyword, args.max_results)
        print(json.dumps(results, ensure_ascii=False, indent=2))
        return

    parser.print_help()


if __name__ == "__main__":
    main()

動作確認

python -u src/aws_updates.py  --keyword EC2 --max-results 3
[
  {
    "title": "Amazon EC2 C8i および C8i-flex インスタンスがアジアパシフィック (シドニー) および欧州 (フランクフルト) リージョンで利用可能に",
    "link": "https://aws.amazon.com/jp/about-aws/whats-new/2026/01/amazon-ec2-c8i-c8i-flex-instances-asia-pacific-sydney-europe-london-regions",
    "description": "<p>本日より、Amazon Elastic Compute Cloud (Amazon EC2) C8i および C8i-flex インスタンスがアジアパシフィック (シドニー) と欧州 (フランクフルト) のリージョンで利用できるようになります。これらのインスタンスは、AWS でのみ利用可能なカスタム Intel Xeon 6 プロセッサを搭載しており、クラウド内の同等の Intel プロセッサの中で最高のパフォーマンスと最速のメモリ帯域幅を提供します。C8i インスタンスと C8i-flex インスタンスは、前世代の Intel ベースのインスタンスと比較して、コストパフォーマンスが最大 15% 向上し、メモリ帯域幅も 2.5 倍向上しています。C7i および C7i-flex インスタンスと比較した場合、パフォーマンスは最大で 20% 向上し、一部のワークロードではより高いパフォーマンスが実現します。C8i および C8i-flex は、C7i および C7i-flex と比較して、NGINX ウェブアプリケーションでは最大 60%、AI 深層学習推奨モデルでは最大 40%、Memcached ストアでは最大 35% 高速です。<br> <br> C8i-flex は、ウェブサーバーやアプリケーションサーバー、データベース、キャッシュ、Apache Kafka、Elasticsearch、エンタープライズアプリケーションなど、コンピューティング負荷の高いワークロードの大部分で価格パフォーマンスのメリットを得る最も簡単な方法です。large から 16xlarge までの非常に一般的なサイズを提供しており、すべてのコンピューティングリソースをフルに活用しきれていないアプリケーションに最適な選択肢です。<br> <br> C8i インスタンスは、メモリ負荷の高いワークロード全般に適しています。特に、最大のインスタンスサイズや継続的に高い CPU 使用率を必要とするワークロードに最適です。C8i インスタンスは、13 種類のサイズで提供されています。そのうち 2 つはベアメタルサイズで、大規模なアプリケーションに対応する新しいサイズ 96xlarge も追加されています。<br> <br> 使用を開始するには、<a href=\"https://aws.amazon.com/console/\" target=\"_blank\">AWS マネジメントコンソール</a>にサインインしてください。このインスタンスは、Savings Plans、オンデマンドインスタンス、スポットインスタンスでご購入いただけます。この新しい <a href=\"https://aws.amazon.com/ec2/instance-types/c8i/\" target=\"_blank\">C8i と C8i-flex</a> のインスタンスの詳細については、<a href=\"https://aws.amazon.com/blogs/aws/introducing-new-compute-optimized-amazon-ec2-c8i-and-c8i-flex-instances/\" target=\"_blank\">AWS ニュースブログ</a>をご覧ください。</p>"
  },
  {
    "title": "Amazon EC2 C8i インスタンスが AWS 欧州 (ロンドン) リージョンで使用可能に",
    "link": "https://aws.amazon.com/jp/about-aws/whats-new/2026/01/amazon-ec2-c8i-instances-europe-london-region",
    "description": "<p>本日より、Amazon Elastic Compute Cloud (Amazon EC2) C8i インスタンスが欧州 (ロンドン) リージョンで利用可能になりました。これらのインスタンスは、AWS でのみ利用可能なカスタム Intel Xeon 6 プロセッサを搭載しており、クラウド内の同等の Intel プロセッサの中で最高のパフォーマンスと最速のメモリ帯域幅を提供します。C8i インスタンスは、前世代の Intel ベースのインスタンスと比較して、コストパフォーマンスが最大 15% 向上し、メモリ帯域幅も 2.5 倍向上しています。C7i インスタンスと比較した場合、パフォーマンスは最大で 20% 向上し、一部のワークロードではより高いパフォーマンスが実現します。C8i は、C7i と比較して、NGINX ウェブアプリケーションでは最大 60%、AI 深層学習推奨モデルでは最大 40%、Memcached ストアでは最大 35% 高速です。<br> <br> <br> C8i インスタンスは、メモリ負荷の高いワークロード全般に適しています。特に、最大のインスタンスサイズや継続的に高い CPU 使用率を必要とするワークロードに最適です。C8i インスタンスは、13 種類のサイズで提供されています。そのうち 2 つはベアメタルサイズで、大規模なアプリケーションに対応する新しいサイズ 96xlarge も追加されています。<br> <br> 使用を開始するには、<a href=\"https://aws.amazon.com/console/\" target=\"_blank\">AWS マネジメントコンソール</a>にサインインしてください。このインスタンスは、Savings Plans、オンデマンドインスタンス、スポットインスタンスでご購入いただけます。この新しい <a href=\"https://aws.amazon.com/ec2/instance-types/c8i/\" target=\"_blank\">C8i </a> インスタンスの詳細については、<a href=\"https://aws.amazon.com/blogs/aws/introducing-new-compute-optimized-amazon-ec2-c8i-and-c8i-flex-instances/\" target=\"_blank\">AWS ニュースブログ</a>をご覧ください。</p>"
  },
  {
    "title": "Amazon EC2 C8gn インスタンスを利用可能なリージョンが拡大",
    "link": "https://aws.amazon.com/jp/about-aws/whats-new/2026/01/amazon-ec2-c8gn-instances-additional-regions",
    "description": "<p>本日より、最新世代の AWS Graviton4 プロセッサを搭載した Amazon Elastic Compute Cloud (Amazon EC2) C8gn インスタンスが、アジアパシフィック (ムンバイ)、アフリカ (ケープタウン)、欧州 (アイルランド、ロンドン)、カナダ西部 (カルガリー) の AWS リージョンで利用できるようになりました。新しいインスタンスは、Graviton3 ベースの Amazon EC2 C7gn インスタンスよりもコンピューティングパフォーマンスが最大で 30% 優れています。Amazon EC2 C8gn インスタンスには最新の第 6 世代 AWS Nitro Card が搭載されており、最大 600 Gbps のネットワーク帯域幅を提供します。これは、ネットワーク最適化 EC2 インスタンスの中で最高のネットワーク帯域幅です。&nbsp;<br> &nbsp;<br> C8gn の強化されたネットワーク機能を活用して、パフォーマンスとスループットをスケールすると同時に、ネットワーク仮想アプライアンス、データ分析、CPU ベースの人工知能と機械学習 (AI/ML) 推論などのネットワーク集約型ワークロードの実行コストを最適化できます。&nbsp;<br> &nbsp;<br> スケーラビリティを高めるため、C8gn インスタンスでは最大 48xlarge、最大 384 GiB メモリ、Amazon Elastic Block Store (EBS) への最大 60 Gbps の帯域幅までのインスタンスサイズが用意されています。C8gn インスタンスは 16xlarge、24xlarge、48xlarge、metal-24xl、metal-48xl サイズで Elastic Fabric Adapter (EFA) ネットワークをサポートしています。これにより、密結合のクラスター上にデプロイされたワークロードのレイテンシーを低減し、クラスターのパフォーマンスを改善できます。&nbsp;<br> &nbsp;<br> C8gn インスタンスは、米国東部 (バージニア北部、オハイオ)、米国西部 (オレゴン、北カリフォルニア)、欧州 (フランクフルト、ストックホルム、ロンドン)、アジアパシフィック (シンガポール、マレーシア、シドニー、タイ、ムンバイ)、中東 (UAE)、アフリカ (ケープタウン)、カナダ西部 (カルガリー) の AWS リージョンで利用できます。&nbsp;<br> &nbsp;<br> 詳細については、<a href=\"https://aws.amazon.com/ec2/instance-types/c8g/\">Amazon C8gn インスタンス</a>をご覧ください。Graviton の利用を開始するには、<a href=\"https://aws.amazon.com/ec2/graviton/level-up-with-graviton/\">「Level up your compute with AWS Graviton」ページ</a>にアクセスしてください。使用を開始するには、<a href=\"https://console.aws.amazon.com/\">AWS マネジメントコンソール</a>、<a href=\"https://aws.amazon.com/cli/\">AWS コマンドラインインターフェイス (AWS CLI)</a>、<a href=\"https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html\">AWS SDK</a> をご覧ください。</p>"
  }
]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?