A small Kotlin/JVM workshop project for learning how to build: MCP servers over stdio an MCP client that launches and connects to a local server process an agent loop that lets Gemini discover MCP tools and call them dynamically simple data integrations against football and cryptocurrency APIs The repository is structured as an educational sample
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"mcp-workshop": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
A small Kotlin/JVM workshop project for learning how to build: MCP servers over stdio an MCP client that launches and connects to a local server process an agent loop that lets Gemini discover MCP tools and call them dynamically simple data integrations against football and cryptocurrency APIs The repository is structured as an educational sample
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
This server is missing a description. Tools and install config are also missing.If you've used it, help the community.
Add informationBe the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in developer-tools / ai-ml / finance
Dynamic problem-solving through sequential thought chains
XcodeBuildMCP provides tools for Xcode project management, simulator management, and app utilities.
Manage Supabase projects — databases, auth, storage, and edge functions
A Model Context Protocol (MCP) server and CLI that provides tools for agent use when working on iOS and macOS projects.
MCP Security Weekly
Get CVE alerts and security updates for Mcp_workshop and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
A small Kotlin/JVM workshop project for learning how to build:
The repository is structured as an educational sample rather than a polished production app. It already builds successfully, but parts of the runtime flow still depend on local setup and hardcoded configuration.
The project has two main domains:
On top of that, there is an agent example that:
src/main/kotlin/
Main.kt CLI entrypoint for server and agent modes
agent/
FootballCryptoAgent.kt Gemini + MCP agent loop
models/GeminiDomain.kt Gemini request/response DTOs
mcp/
FootballMcpServer.kt Football MCP server and tools
CryptoMcpServer.kt Crypto MCP server and tools
McpClient.kt Launches and connects to MCP server processes
source/remote/
KtorClient.kt Shared HTTP client + JSON config
FetchFootballClient.kt football-data.org integration
FetchCryptoClient.kt CoinGecko integration
models/
FootballDto.kt Football API DTOs
CryptoDto.kt Crypto API DTOs
FetchWeatherDto.kt Unused weather DTOs
Each server uses Server + StdioServerTransport from the MCP Kotlin SDK and registers tools with JSON schemas.
Football tools:
get_standingsget_todays_matchesget_top_scorersCrypto tools:
get_coin_priceget_trending_coinsget_market_overviewThe servers call external APIs through Ktor:
https://api.football-data.org/v4https://api.coingecko.com/api/v3agent/FootballCryptoAgent.kt starts a server process, connects with McpClient, converts MCP tool schemas into Gemini function declarations, and runs a tool-calling loop until Gemini returns a final text answer.
football-data.org API keyCoinGecko endpoints used here do not currently require an API key in this codebase.
From the project root:
./gradlew build
This was verified successfully in the current repository state.
To build the fat jar:
./gradlew shadowJar
Generated jars:
build/libs/mcp_workshop-1.0-SNAPSHOT.jarbuild/libs/mcp_workshop-1.0-SNAPSHOT-all.jarReplace the placeholder constants in these files:
src/main/kotlin/source/remote/FetchFootballClient.kt
private const val FOOTBALL_API_KEY = "YOUR_FOOTBALL_API_KEY"src/main/kotlin/agent/FootballCryptoAgent.kt
val apiKey = "YOUR_GEMINI_API_KEY"For a real project, these should be moved to environment variables or Gradle properties instead of being hardcoded in source.
src/main/kotlin/mcp/McpClient.kt currently uses:
private const val MCP_SERVER_JAR_PATH = "build/libs/mcp_workshop-1.0-SNAPSHOT-all.jar"
This works when you run from the repository root after building the