MCP SeriesGenerator
A .NET server for generating and validating vehicle serial numbers.
This is a repository for testing with Model Context Protocol
Instructions for executing the project
Running with docker:
1. Access the root directory folder in the terminal, example:
cd mcp_seriesgenerator
2. Container execution:
docker-compose up -d
3. Then run the below powershell script command, the docker.ps1 file is located in the root directory (The script will copy the files from the docker container to your local machine)
powershell -ExecutionPolicy ByPass -File docker.ps1
Running with Claude desktop app:
1. Open Claude desktop app for configuration
2. Menu - File - Settings - Developer - Edit Config
3. Open config file in location: \user\AppData\Roaming\Claude\claude_desktop_config.json (Save the file, and restart Claude for Desktop)
{
"mcpServers": {
"serialNumberGenerator": {
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\ABSOLUTE\\PATH\\TO\\PROJECT",
"--no-build"
]
}
}
}
4. Look for the "Search & Tools" icon, type something like Upload Vehicle and insert the file with the serial numbers. Example:
series.txt
1313MEXXXA7989-1
0708BRAXXC4014-3
1414ARGXXA5834-9
1213ASMXXC8348-2
0202ARGXXC2614-E
0606BRAXXA6466-8
0606MEXXXA3820-4
5. More information in: https://modelcontextprotocol.io/quickstart/server
Tests with Mcp Server without client applications:
1. The Model Context Protocol (MCP) allows servers to expose tools that can be invoked externally in a standardized way.
1.1. First, it is necessary to configure the Mcp Server and its tools that will be exposed in the application. Here we configure with StdioServerTransport:
//class src/McpSeriesGenerator.App/Program.cs
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithTools<VehicleTool>();
builder.Services.AddScoped<VehicleTool>();
1.2. In the project, there are resources created for the Mcp Server tool. Among some of them, we have, for example, ReturnsIfTheSerialNumberIsValid.
//class src/McpSeriesGenerator.App/McpServer/VehicleTool.cs
[McpServerTool(Name = "ReturnsIfTheSerialNumberIsValid"), Description("Validate serial number with check digit.")]
public string ReturnsIfTheSerialNumberIsValid(
[Description("Enter a serial number with check digit")] string SerialNumber)
{
if (string.IsNullOrWhiteSpace(SerialNumber))
{
return "Serial number cannot be empty.";
}
var vehicle = Vehicle.Create(SerialNumber);
if (vehicle.VehicleSerialNumber.ValidateCheckDigit())
{
return "This serial number is valid";
}
return "This serial number is invalid";
}
2. In the integration test project, there is communication via StdioServerTransport for real simulation of an integration between client application and Mcp Server.
2.1. In the following code, in the constructor method, a process instance is created to run the Mcp Server project externally from the integration test project.
//class test/McpSeriesGenerator.Integration/McpServer/ProcessFixture.cs
public ProcessFixture()
{
string appDll = Path.Combine(AppContext.BaseDirectory, "McpSeriesGenerator.App.dll");
_process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "dotnet",
Arguments = $"\"{appDll}\"",
RedirectStandardInput = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
_process.Start();
if (_process == null)
{
throw new InvalidOperationException("Failed to start MCP server process");
}
}
2.2. Example test method with the ReturnsIfTheSerialNumberIsValid tool:
//class test/McpSeriesGenerator.Integration/McpServer/VehicleToolTest.cs
public async Task MCPServer_ShouldResponseToReturnsIfTheSerialNumberIsValid()
{
Assert.NotNull(_fixture._process);
_ = Task.Run(async () =>
{
string? err;
while ((err = await _fixture._process.StandardError.ReadLineAsync()) != null)
Console.WriteLine("[STDERR] " + err);
});
var jsonString = JsonSerializer.Serialize(new
{
jsonrpc = "2.0",
id = 1,
method = "tools/call",
@params = new
{
name = "ReturnsIfTheSerialNumberIsValid",
arguments = new { SerialNumber = "0202ARGXXC2614-E" }
}
});
await _fixture._process.StandardInput.WriteLineAsync(jsonString);
await _fixture._process.StandardInput.FlushAsync();
if (_fixture._process.StandardOutput.Peek() > 0)
{
var responseOut = await _fixture._process.StandardOutput.ReadLineAsync();
Assert.True(!string.IsNullOrWhiteSpace(responseOut));
Assert.Contains("jsonrpc", responseOut);
JsonNode? node = JsonNode.Parse(responseOut);
Assert.NotNull(node);
Assert.NotNull(node?["result"]);
Assert.NotNull(node?["result"]?["isError"]);
Assert.True(bool.TryParse(node?["result"]?["isError"]?.ToString(), out bool isError));
Assert.False(isError);
}
}
Technologies and tools used:
Máy chủ liên quan
Scout Monitoring MCP
nhà tài trợPut performance and error data directly in the hands of your AI assistant.
Alpha Vantage MCP Server
nhà tài trợAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
MCP Hot-Reload
A Hot Module Replacement (HMR) proxy server for MCP servers that automatically restarts on file changes, buffers messages, and manages connections.
MetaTrader 4
Integrate with the MetaTrader 4 trading platform to access trading functions and data via an HTTP bridge and Expert Advisor.
Sugar
Autonomous AI development system for Claude Code with task queue management and workflow automation.
Hackle
Query A/B test data using the Hackle API.
NuGet Package README
Fetches comprehensive information about NuGet packages from the NuGet Gallery, including READMEs, metadata, and search functionality.
Code Summarizer
A command-line tool that summarizes code files in a directory using Gemini Flash 2.0.
Remote MCP Server (Authless)
A remote MCP server deployable on Cloudflare Workers without authentication.
SolTracker
Access real-time and historical token, wallet, and trading data from the Solana ecosystem via the Solana Tracker API.
Crates MCP Server
Query Rust crates from crates.io and docs.rs. Search for crates, get info, versions, dependencies, and documentation.
Figma
Interact with Figma files to view, comment on, and analyze designs.