Skip to main content
Glama

Scenic MCP

test_screenshot_debug.exs3.66 kB
#!/usr/bin/env elixir # Debug script to test screenshot functionality require Logger defmodule ScreenshotDebug do def test_screenshot do Logger.info("Starting screenshot debug test...") # Find the viewport viewport = find_scenic_viewport() if viewport do Logger.info("Found viewport: #{inspect(viewport)}") # Get viewport state try do state = :sys.get_state(viewport, 5000) Logger.info("Viewport state type: #{inspect(state.__struct__)}") Logger.info("Viewport state keys: #{inspect(Map.keys(state))}") # Try different ways to get driver_pids driver_pids = case state do %{driver_pids: pids} -> Logger.info("Found driver_pids directly: #{inspect(pids)}") pids %{drivers: drivers} -> Logger.info("Found drivers field: #{inspect(drivers)}") drivers _ -> Logger.info("No driver_pids or drivers field found") [] end # Check if we have any processes that look like drivers all_processes = Process.list() driver_processes = Enum.filter(all_processes, fn pid -> case Process.info(pid, [:registered_name, :dictionary]) do [{:registered_name, name}, {:dictionary, dict}] when is_atom(name) -> name_str = Atom.to_string(name) is_driver = String.contains?(name_str, "driver") or String.contains?(name_str, "Driver") or Enum.any?(dict, fn {k, _} -> String.contains?(to_string(k), "driver") end) if is_driver do Logger.info("Found potential driver process: #{name} (#{inspect(pid)})") end is_driver _ -> false end end) Logger.info("Found #{length(driver_processes)} potential driver processes") # Try to find Scenic.Driver.Local processes specifically scenic_drivers = Enum.filter(all_processes, fn pid -> case :sys.get_state(pid, 1000) do %{module: Scenic.Driver.Local} -> Logger.info("Found Scenic.Driver.Local process: #{inspect(pid)}") true _ -> false rescue _ -> false end end) Logger.info("Found #{length(scenic_drivers)} Scenic.Driver.Local processes") # Log the full state for debugging Logger.info("Full viewport state: #{inspect(state, limit: :infinity, pretty: true)}") rescue e -> Logger.error("Error getting viewport state: #{inspect(e)}") end else Logger.error("No viewport found!") end end def find_scenic_viewport do Logger.info("Searching for viewport...") result = Process.list() |> Enum.find(fn pid -> case Process.info(pid, [:registered_name, :dictionary]) do [{:registered_name, name}, {:dictionary, dict}] when is_atom(name) -> name_str = Atom.to_string(name) is_viewport = String.contains?(name_str, "viewport") or Enum.any?(dict, fn {k, _} -> String.contains?(to_string(k), "viewport") end) if is_viewport do Logger.info("Found viewport candidate: #{name} (#{inspect(pid)})") end is_viewport _ -> false end end) Logger.info("Viewport search result: #{inspect(result)}") result end end # Run the test ScreenshotDebug.test_screenshot()

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/scenic-contrib/scenic_mcp_experimental'

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