refactor(test): add centralized TypeScript server factory for integration tests (#477)

# refactor(test): add centralized TypeScript server factory for
integration tests

  - Create TypeScriptServer class for managing TypeScript MCP servers
  - Add dedicated typescript/ directory with server infrastructure
  - Refactor TsTestBase to use TypeScriptServer for stdio transport
- Extract TypeScript test tools (greet, multi-greet, prompts, resources)
  - Use npx tsx for direct execution (better performance than npm run)
  - Install TypeScript dependencies automatically in test setup

  The TypeScriptServer factory provides:
  - startSse(port): Start SSE transport server
  - startStdio(): Start STDIO transport server
  - stop(): Graceful server shutdown
  - installDependencies(): npm install automation

<!-- Provide a brief summary of your changes -->

## Motivation and Context
To resurrect typescript tests

## How Has This Been Tested?
Locally, CI

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
- [x] Bug fix (non-breaking change which fixes an issue)
- [x] Test fix

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
#475
This commit is contained in:
Konstantin Pavlov 2026-01-10 20:46:51 +02:00 • committed by GitHub
commit 658b370c87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -20,11 +20,14 @@ public object TypeScriptRunner {
public fun run(
typescriptDir: File,
scriptPath: String,
arguments: List<String> = emptyList(),
env: Map<String, String> = emptyMap(),
redirectErrorStream: Boolean = false,
logPrefix: String = "TS-RUNNER",
): Process {
val pb = ProcessBuilder("npx", "tsx", scriptPath)
val command = mutableListOf("npx", "tsx", scriptPath)
command.addAll(arguments)
val pb = ProcessBuilder(command)
pb.directory(typescriptDir)
env.forEach { (k, v) -> pb.environment()[k] = v }
pb.redirectErrorStream(redirectErrorStream)