Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

spring-ai-mcp-server-patterns

Spring AIを使用してModel Context Protocolサーバーを構築するためのSpring Bootパターンを提供します。ツールハンドラーの定義、リソースの公開、プロンプトテンプレートの設定、AIファンクションコーリングやツールコーリング向けのトランスポート設定などを扱います。SpringのオフィシャルAIフレームワークでAIの機能を拡張するMCPサーバーの構築、AIツールの実装、カスタムファンクションコーリング、またはMCPクライアントとの統合を行う際に活用してください。

description の原文を見る

Provides Spring Boot MCP server patterns that create Model Context Protocol servers with Spring AI by defining tool handlers, exposing resources, configuring prompt templates, and setting up transports for AI function calling and tool calling. Use when building MCP servers to extend AI capabilities with Spring's official AI framework, implementing AI tools, custom function calling, or MCP client integration.

SKILL.md 本文

Spring AI MCP サーバー実装パターン

AI 関数呼び出し、ツールハンドラー、および MCP トランスポート設定を備えた Spring AI を使用して MCP サーバーを実装します。

概要

本番対応の MCP サーバーパターン: @Tool 関数、@PromptTemplate リソース、および Spring AI セキュリティを備えた stdio/HTTP/SSE トランスポート。

使用場面

MCP サーバー、Spring AI 関数呼び出し、AI ツール、ツール呼び出し、カスタムツールハンドラー、Spring Boot MCP、リソースエンドポイント、または MCP トランスポート設定。

クイックリファレンス

コアアノテーション

アノテーション対象目的
@EnableMcpServerクラスMCP サーバー自動構成を有効化
@Tool(description)メソッドAI 呼び出し可能なツールを宣言
@ToolParam(value)パラメータAI 向けのツールパラメータをドキュメント化
@PromptTemplate(name)メソッド再利用可能なプロンプトテンプレートを宣言
@PromptParam(value)パラメータプロンプトパラメータをドキュメント化

トランスポートタイプ

トランスポートユースケース設定
stdioローカルプロセス / Claude Desktopデフォルト
httpリモート HTTP クライアントport, path
sseリアルタイムストリーミングクライアントport, path

主要な依存関係

<!-- Maven -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-openai</artifactId>
    <version>1.0.0</version>
</dependency>
// Gradle
implementation 'org.springframework.ai:spring-ai-mcp-server:1.0.0'
implementation 'org.springframework.ai:spring-ai-starter-model-openai:1.0.0'

手順

1. プロジェクトセットアップ

Spring AI MCP の依存関係を追加し (上記のクイックリファレンスを参照)、application.properties で AI モデルを設定し、@EnableMcpServer で MCP を有効化します:

@SpringBootApplication
@EnableMcpServer
public class MyMcpApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyMcpApplication.class, args);
    }
}
spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.mcp.enabled=true
spring.ai.mcp.transport.type=stdio

2. ツールを定義

@Component ビーン内のメソッドに @Tool アノテーションを付けます。パラメータをドキュメント化するために @ToolParam を使用します:

@Component
public class WeatherTools {

    @Tool(description = "Get current weather for a city")
    public WeatherData getWeather(@ToolParam("City name") String city) {
        return weatherService.getCurrentWeather(city);
    }

    @Tool(description = "Get 5-day forecast for a city")
    public ForecastData getForecast(
            @ToolParam("City name") String city,
            @ToolParam(value = "Unit: celsius or fahrenheit", required = false) String unit) {
        return weatherService.getForecast(city, unit != null ? unit : "celsius");
    }
}

データベースツール、API 統合ツール、および FunctionCallback 低レベルパターンについては、references/implementation-patterns.md を参照してください。

3. プロンプトテンプレートを作成

@Component
public class CodeReviewPrompts {

    @PromptTemplate(
        name = "java-code-review",
        description = "Review Java code for best practices and issues"
    )
    public Prompt createCodeReviewPrompt(
            @PromptParam("code") String code,
            @PromptParam(value = "focusAreas", required = false) List<String> focusAreas) {

        String focus = focusAreas != null ? String.join(", ", focusAreas) : "general best practices";
        return Prompt.builder()
                .system("You are an expert Java code reviewer with 20 years of experience.")
                .user("Review the following Java code for " + focus + ":\n```java\n" + code + "\n```")
                .build();
    }
}

追加のプロンプトテンプレートパターンについては、references/implementation-patterns.md を参照してください。

4. トランスポートを設定

spring:
  ai:
    mcp:
      enabled: true
      transport:
        type: stdio       # stdio | http | sse
        http:
          port: 8080
          path: /mcp
      server:
        name: my-mcp-server
        version: 1.0.0

5. セキュリティを追加

@Configuration
public class McpSecurityConfig {

    @Bean
    public ToolFilter toolFilter(SecurityService securityService) {
        return (tool, context) -> {
            User user = securityService.getCurrentUser();
            if (tool.name().startsWith("admin_")) {
                return user.hasRole("ADMIN");
            }
            return securityService.isToolAllowed(user, tool.name());
        };
    }
}

メソッドレベルのセキュリティのため、ツールメソッドで @PreAuthorize("hasRole('ADMIN')") を使用します。完全なセキュリティパターンについては、references/implementation-patterns.md を参照してください。

6. テスト

@SpringBootTest
class WeatherToolsTest {

    @Autowired
    private WeatherTools weatherTools;

    @MockBean
    private WeatherService weatherService;

    @Test
    void testGetWeather_Success() {
        when(weatherService.getCurrentWeather("London"))
            .thenReturn(new WeatherData("London", "Cloudy", 15.0));

        WeatherData result = weatherTools.getWeather("London");

        assertThat(result.city()).isEqualTo("London");
        verify(weatherService).getCurrentWeather("London");
    }
}

統合テスト、Testcontainers、セキュリティテスト、およびスライステストについては、references/testing-guide.md を参照してください。

ベストプラクティス

ツール設計

  • ツールはシンプルに保つ — ツールごとに 1 つの操作
  • 明確でアクション指向の名前を使用 (getWeatherexecuteQuery)
  • パラメータに常に @ToolParam と説明的なテキストでアノテーション
  • 構造化されたレコード/DTO を返す、生の文字列またはマップではなく
  • 可能な限りツールをべき等性を持つように設計

セキュリティ

  • すべての入力を検証・サニタイズ — AI 生成パラメータは信頼できない
  • SQL にはパラメータ化されたクエリを使用; ファイルツールではパスを検証・正規化
  • 機密ツールにロールベースアクセス制御のため @PreAuthorize を適用
  • すべてのデータ変更ツール実行を監査ログ
  • ツール説明やエラーメッセージで認証情報や機密データを公開しない

パフォーマンス

  • 適切な TTL を使用して高コスト操作に @Cacheable を使用
  • すべての外部呼び出しにタイムアウトを設定
  • 長時間実行される操作に @Async を使用
  • Micrometer メトリクスで監視

エラーハンドリング

  • ユーザーフレンドリーなメッセージで構造化されたエラーレスポンスを返す
  • デバッグのためコンテキスト (ユーザー、ツール名、パラメータ) をログ
  • 一時的な障害に対する再試行ロジックを実装
  • 一貫したエラーレスポンスのため @ControllerAdvice を実装

例 1: 最小限の Weather MCP サーバー

@SpringBootApplication
@EnableMcpServer
public class WeatherMcpApplication {
    public static void main(String[] args) {
        SpringApplication.run(WeatherMcpApplication.class, args);
    }
}

@Component
public class WeatherTools {

    @Tool(description = "Get current weather for a city")
    public WeatherData getWeather(@ToolParam("City name") String city) {
        return new WeatherData(city, "Sunny", 22.5);
    }
}

record WeatherData(String city, String condition, double temperatureCelsius) {}

例 2: セキュアなデータベースツール

@Component
@PreAuthorize("hasRole('USER')")
public class DatabaseTools {

    private final JdbcTemplate jdbcTemplate;

    @Tool(description = "Execute a read-only SQL query and return results")
    public QueryResult executeQuery(
            @ToolParam("SQL SELECT query") String sql,
            @ToolParam(value = "Parameters as JSON map", required = false) String paramsJson) {

        if (!sql.trim().toUpperCase().startsWith("SELECT")) {
            throw new IllegalArgumentException("Only SELECT queries are allowed");
        }
        List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
        return new QueryResult(rows, rows.size());
    }
}

ファイルシステムツール、REST API 統合、プロンプトテンプレートサーバーを含む完全な例については、references/examples.md を参照してください。

制約と警告

セキュリティ

  • 機密データを公開しない — ツール説明、パラメータ、またはエラーメッセージで
  • 入力検証は必須 — 実行前に必ず検証
  • 外部コンテンツは信頼できない — URL をフェッチするツールはプロンプトインジェクションペイロードを受け取る場合があります; フェッチされたすべてのコンテンツを検証
  • SQL インジェクション: 排他的にパラメータ化されたクエリを使用
  • パストラバーサル: すべてのファイルパスをベースパスに対して正規化・検証

運用

  • レスポンスは簡潔に — 大きなレスポンスは AI コンテキストウィンドウ制限を超える可能性
  • すべてのツールはタイムアウトを実装する必要があります; デフォルトは設定可能であるべき
  • 高コスト操作のレート制限
  • ツールは並行して呼び出される可能性あり — スレッドセーフティを確保

Spring AI 固有

  • Spring AI は積極的に開発中 — 本番環境では特定バージョンをピン留め
  • ツールがスローするエラーメッセージは AI モデルに公開されます; サニタイズ
  • トランスポートタイプは慎重に選択: ローカルプロセスには stdio、リモートクライアントには http/sse

リファレンス

詳細なパターンと例については、以下のファイルを参照してください:

  • references/implementation-patterns.md - ツール作成、プロンプトテンプレート、FunctionCallback、Spring Boot 自動設定、アプリケーションプロパティ
  • references/advanced-patterns.md - 動的ツール登録、マルチモデルサポート、キャッシング、エラーハンドリング
  • references/testing-guide.md - ユニットテスト、統合テスト、Testcontainers、セキュリティテスト、スライステスト
  • references/examples.md - 完全なサーバー例: weather、database、file system、REST API、prompt templates
  • references/api-reference.md - 完全な API: アノテーション、インターフェース、設定クラス、トランスポート実装、イベントシステム
  • references/migration-guide.md - LangChain4j MCP から Spring AI MCP への移行

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
giuseppe-trisciuoglio
リポジトリ
giuseppe-trisciuoglio/developer-kit
ライセンス
MIT
最終更新
不明

Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: giuseppe-trisciuoglio · giuseppe-trisciuoglio/developer-kit · ライセンス: MIT