> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mcp-use.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Config

> Configurable logging setup for MCP servers API Documentation

export const RandomGradientBackground = ({className, color, children, grayscaled = false}) => {
  const saturation = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[1] || "0");
    }
    return grayscaled ? 0 : 0.2;
  }, [color, grayscaled]);
  const lightness = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[0] || "0.5");
    }
    return grayscaled ? 0.3 : 0.4;
  }, [color, grayscaled]);
  const randomHue = useMemo(() => {
    if (color) {
      const values = color.split("(")[1].split(")")[0].trim().split(/\s+/);
      return parseFloat(values[2] || "0");
    }
    return Math.floor(Math.random() * 360);
  }, [color]);
  const randomColor = useMemo(() => {
    if (color) {
      return color;
    }
    return `oklch(${Math.min(lightness, 1)} ${saturation} ${randomHue})`;
  }, [randomHue, saturation, lightness]);
  const lightColor = useMemo(() => {
    return `oklch(${Math.min(lightness * 2, 1)} ${saturation} ${randomHue})`;
  }, [randomHue, saturation, lightness, color]);
  const direction = useMemo(() => {
    return Math.floor(Math.random() * 360);
  }, [randomHue]);
  const brightnessFilter = useMemo(() => {
    return "1000%";
  }, []);
  return <div className={`relative overflow-hidden ${className || ""}`} style={{
    background: `${lightColor}`,
    minHeight: '100%',
    width: '100%'
  }}>
      <div className="absolute inset-0 w-full h-full" style={{
    background: `linear-gradient(${direction}deg, ${randomColor}, transparent), url(https://grainy-gradients.vercel.app/noise.svg)`,
    filter: `contrast(120%) brightness(${brightnessFilter})`,
    backgroundSize: 'cover',
    backgroundRepeat: 'no-repeat'
  }} />
      {children && <div className="relative z-10 w-full h-full">{children}</div>}
    </div>;
};

<Callout type="info" title="Source Code">
  View the source code for this module on GitHub: <a href="https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/server/logging/config.py" target="_blank" rel="noopener noreferrer">[https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp\_use/server/logging/config.py](https://github.com/mcp-use/mcp-use/blob/main/libraries/python/mcp_use/server/logging/config.py)</a>
</Callout>

Configurable logging setup for MCP servers.

## InspectorLogFilter

<div>
  <RandomGradientBackground className="rounded-lg p-4 w-full h-full rounded-full">
    <div className="text-black">
      <div className="text-black font-bold text-xl mb-2 mt-8"><code className="!text-black">class</code> InspectorLogFilter</div>

      Filter that hides inspector-related access logs.
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.logging.config import InspectorLogFilter
  ```

  <Card type="info">
    ### `method` **init**

    **Parameters**

    > <ParamField body="inspector_path" type="str" default="/inspector">   File path </ParamField>

    **Signature**

    ```python wrap theme={null}
    def __init__(inspector_path: str = "/inspector"):
    ```
  </Card>
</div>

## MCPLogsOnlyFilter

<div>
  <RandomGradientBackground className="rounded-lg p-4 w-full h-full rounded-full">
    <div className="text-black">
      <div className="text-black font-bold text-xl mb-2 mt-8"><code className="!text-black">class</code> MCPLogsOnlyFilter</div>

      Filter that drops all uvicorn access log records.

      MCP protocol logs are printed directly to stdout by MCPLoggingMiddleware,
      bypassing the logging system entirely. This filter drops all uvicorn access
      records so only the MCP: lines remain.
    </div>
  </RandomGradientBackground>

  ```python theme={null}
  from mcp_use.server.logging.config import MCPLogsOnlyFilter
  ```

  <Card type="info">
    ### `method` **init**

    Initialize a filter.

    Initialize with the name of the logger which, together with its
    children, will have its events allowed through the filter. If no
    name is specified, allow every event.

    **Parameters**

    > <ParamField body="name" default="">   Name identifier </ParamField>

    **Signature**

    ```python wrap theme={null}
    def __init__(name = ""):
    ```
  </Card>
</div>

## setup\_logging

<Card type="info">
  ### `function` setup\_logging

  Set up logging configuration for MCP server.

  ```python theme={null}
  from mcp_use.server.logging.config import setup_logging
  ```

  **Parameters**

  > <ParamField body="debug_level" type="int" default="0">   Debug level (0: production, 1: debug+routes, 2: debug+routes+jsonrpc) </ParamField>
  > <ParamField body="log_level" type="str" default="INFO">   Logging level (DEBUG, INFO, WARNING, ERROR) </ParamField>
  > <ParamField body="show_inspector_logs" type="bool" default="False">   Whether to show inspector-related access logs (default: False) </ParamField>
  > <ParamField body="inspector_path" type="str" default="/inspector">   Effective inspector route prefix, typically `/inspector` </ParamField>
  > <ParamField body="mcp_logs_only" type="bool" default="False">   When True, suppress all uvicorn access logs (MCP logs are printed </ParamField>

  **Returns**

  > <ResponseField name="returns" type="dict">Uvicorn logging configuration dict</ResponseField>

  **Signature**

  ```python wrap theme={null}
  def setup_logging(
  debug_level: int = 0,
      log_level: str = "INFO",
      show_inspector_logs: bool = False,
      inspector_path: str = "/inspector",
      mcp_logs_only: bool = False
  ):
  ```
</Card>
