Skip to main content
Glama

MCP Server for Unity

by zabaglione
UnityHttpServerTests.cs6.65 kB
using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using NUnit.Framework; using Newtonsoft.Json; using UnityEngine; using UnityEngine.TestTools; namespace UnityMCP.Tests { [TestFixture] public class UnityHttpServerTests { private const string BASE_URL = "http://localhost:23457"; private HttpClient httpClient; [SetUp] public void Setup() { httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromSeconds(5); } [TearDown] public void TearDown() { httpClient?.Dispose(); } [Test] public async Task Server_ShouldRespondToPing() { // Arrange var request = new { method = "ping" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.IsTrue(response.IsSuccessStatusCode); Assert.AreEqual("ok", result.status.ToString()); } [Test] public async Task CreateScript_ShouldReturnSuccessWithValidParams() { // Arrange var request = new { method = "script/create", fileName = "TestScript", content = "public class TestScript : MonoBehaviour { }", folder = "Assets/Scripts/Test" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.IsTrue(response.IsSuccessStatusCode); Assert.IsTrue(result.success); Assert.IsNotNull(result.path); Assert.IsNotNull(result.guid); } [Test] public async Task CreateScript_ShouldReturnErrorWithMissingFileName() { // Arrange var request = new { method = "script/create", content = "public class TestScript : MonoBehaviour { }" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.AreEqual(400, (int)response.StatusCode); Assert.IsFalse(result.success); Assert.IsNotNull(result.error); } [Test] public async Task ReadScript_ShouldReturnContentForExistingFile() { // Arrange - First create a script var createRequest = new { method = "script/create", fileName = "ReadTestScript", content = "// Test content", folder = "Assets/Scripts/Test" }; await httpClient.PostAsync($"{BASE_URL}/", new StringContent(JsonConvert.SerializeObject(createRequest), Encoding.UTF8, "application/json")); // Act - Read the script var readRequest = new { method = "script/read", path = "Assets/Scripts/Test/ReadTestScript.cs" }; var response = await httpClient.PostAsync($"{BASE_URL}/", new StringContent(JsonConvert.SerializeObject(readRequest), Encoding.UTF8, "application/json")); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.IsTrue(response.IsSuccessStatusCode); Assert.IsTrue(result.success); Assert.AreEqual("// Test content", result.content.ToString()); } [Test] public async Task CreateShader_ShouldReturnSuccessWithValidParams() { // Arrange var request = new { method = "shader/create", name = "TestShader", content = "Shader \"Custom/TestShader\" { }", folder = "Assets/Shaders" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.IsTrue(response.IsSuccessStatusCode); Assert.IsTrue(result.success); Assert.IsNotNull(result.path); Assert.IsNotNull(result.guid); } [Test] public async Task GetProjectInfo_ShouldReturnProjectDetails() { // Arrange var request = new { method = "project/info" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject<dynamic>(responseBody); // Assert Assert.IsTrue(response.IsSuccessStatusCode); Assert.IsNotNull(result.projectPath); Assert.IsNotNull(result.unityVersion); } [Test] public async Task InvalidMethod_ShouldReturn404() { // Arrange var request = new { method = "invalid/method" }; var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"); // Act var response = await httpClient.PostAsync($"{BASE_URL}/", content); // Assert Assert.AreEqual(404, (int)response.StatusCode); } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zabaglione/mcp-server-unity'

If you have feedback or need assistance with the MCP directory API, please join our Discord server