Lets AI agents control an astrophotography setup (camera, mount, focuser and more) through the N.I.N.A Advanced API.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add n-i-n-a-advanced-api --env IMAGE_SAVE_DIR='<IMAGE_SAVE_DIR>' --env LOG_LEVEL='<LOG_LEVEL>' --env NINA_HOST='<NINA_HOST>' --env NINA_PORT='<NINA_PORT>' -- uv run --with fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv fastmcp run path/nina_advanced_mcp.py~/.codex/config.toml
[mcp_servers.n-i-n-a-advanced-api]
command = "uv"
args = ["run", "--with", "fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv", "fastmcp", "run", "path/nina_advanced_mcp.py"]
env = { IMAGE_SAVE_DIR = "<IMAGE_SAVE_DIR>", LOG_LEVEL = "<LOG_LEVEL>", NINA_HOST = "<NINA_HOST>", NINA_PORT = "<NINA_PORT>" }
# codex mcp add n-i-n-a-advanced-api --env IMAGE_SAVE_DIR='<IMAGE_SAVE_DIR>' --env LOG_LEVEL='<LOG_LEVEL>' --env NINA_HOST='<NINA_HOST>' --env NINA_PORT='<NINA_PORT>' -- uv run --with fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv fastmcp run path/nina_advanced_mcp.py~/.cursor/mcp.json
{
"mcpServers": {
"n-i-n-a-advanced-api": {
"command": "uv",
"args": [
"run",
"--with",
"fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv",
"fastmcp",
"run",
"path/nina_advanced_mcp.py"
],
"env": {
"IMAGE_SAVE_DIR": "<IMAGE_SAVE_DIR>",
"LOG_LEVEL": "<LOG_LEVEL>",
"NINA_HOST": "<NINA_HOST>",
"NINA_PORT": "<NINA_PORT>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"n-i-n-a-advanced-api": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--with",
"fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv",
"fastmcp",
"run",
"path/nina_advanced_mcp.py"
],
"env": {
"IMAGE_SAVE_DIR": "<IMAGE_SAVE_DIR>",
"LOG_LEVEL": "<LOG_LEVEL>",
"NINA_HOST": "<NINA_HOST>",
"NINA_PORT": "<NINA_PORT>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"n-i-n-a-advanced-api": {
"command": "uv",
"args": [
"run",
"--with",
"fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv",
"fastmcp",
"run",
"path/nina_advanced_mcp.py"
],
"env": {
"IMAGE_SAVE_DIR": "<IMAGE_SAVE_DIR>",
"LOG_LEVEL": "<LOG_LEVEL>",
"NINA_HOST": "<NINA_HOST>",
"NINA_PORT": "<NINA_PORT>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"n-i-n-a-advanced-api": {
"command": "uv",
"args": [
"run",
"--with",
"fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv",
"fastmcp",
"run",
"path/nina_advanced_mcp.py"
],
"env": {
"IMAGE_SAVE_DIR": "<IMAGE_SAVE_DIR>",
"LOG_LEVEL": "<LOG_LEVEL>",
"NINA_HOST": "<NINA_HOST>",
"NINA_PORT": "<NINA_PORT>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"n-i-n-a-advanced-api": {
"command": "uv",
"args": [
"run",
"--with",
"fastmcp,fastapi,uvicorn,pydantic,aiohttp,requests,python-dotenv",
"fastmcp",
"run",
"path/nina_advanced_mcp.py"
],
"env": {
"IMAGE_SAVE_DIR": "<IMAGE_SAVE_DIR>",
"LOG_LEVEL": "<LOG_LEVEL>",
"NINA_HOST": "<NINA_HOST>",
"NINA_PORT": "<NINA_PORT>"
}
}
}
}Environment variables
IMAGE_SAVE_DIRLOG_LEVELNINA_HOSTNINA_PORT
Replace the placeholders with your own credentials and keep them out of version control.