LINQPad로 MCP 서버 만들고 VSCode로 테스트해보기

위의 글을 보고, 표준 입/출력으로 MCP 서버를 간단히 만들어볼 수 있겠다는 것을 파악하여 곧바로 프로토타이핑해보았는데 잘 작동합니다. 표준 입출력 인터페이스만 제공하면 되는 것이니 조건만 맞으면 유연하게 쓸 수 있는 셈입니다.

<Query Kind="Statements">
  <NuGetReference>Microsoft.Extensions.Hosting</NuGetReference>
  <NuGetReference Prerelease="true">ModelContextProtocol</NuGetReference>
  <Namespace>Microsoft.Extensions.DependencyInjection</Namespace>
  <Namespace>Microsoft.Extensions.Hosting</Namespace>
  <Namespace>ModelContextProtocol.Server</Namespace>
  <Namespace>System.ComponentModel</Namespace>
</Query>

var builder = Host.CreateEmptyApplicationBuilder(settings: null);
builder.Services
	.AddMcpServer()
	.WithStdioServerTransport()
	.WithToolsFromAssembly();

await builder.Build().RunAsync();

[McpServerToolType]
public static class EchoTool
{
	[McpServerTool, Description("Echoes the message back to the client.")]
	public static string Echo(string message) => $"Hello from C#: {message}";

	[McpServerTool, Description("Echoes in reverse the message sent by the client.")]
	public static string ReverseEcho(string message) => new string(message.Reverse().ToArray());
}

위와 같이 MCP 서버 코드를 만든 후, 적용하려는 VSCode 작업 폴더에 .vscode/mcp.json 파일을 다음과 같이 만듭니다. 제 경우에는 LINQPad 스크립트 경로를 다음과 같이 지정했습니다.

{
    "inputs": [],
    "servers": {
        "MyFirstMCP": {
            "type": "stdio",
            "command": "C:\\Program Files\\LINQPad8\\LPRun8.exe",
            "args": [
                "D:\\Users\\rkttu\\Documents\\LINQPad Queries\\mcp-test.linq"
            ]
        }
    }
}

그리고 VS Code Insider 버전에서 에이전트 모드로 Copilot을 연 다음, 도구 버튼을 눌렀을 때 다음과 같이 명령어 asset들이 인식되어 나타나면 정상적으로 실행되고 있는 것입니다.

같은 기능을 만들기 위해서 Web API를 만들어야 했던 이전 GPTs보다 훨씬 개발자 친화적이고 유연성 있는 인터페이스여서 재미있는 경험이었습니다. :smiley:

덧. 조만간 LINQPad macOS 버전으로도 LPRUN 명령줄 유틸리티가 추가될 예정이니 macOS에서도 C#으로 스크립트 언어처럼 LINQPad의 강력한 기능을 활용해서 MCP 서버를 만들 수 있게 됩니다.

4개의 좋아요