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

# Daily Analytics

> Retrieve aggregated daily analytics data for charting and reporting.

Returns per-day aggregated metrics including call counts, success rates, response times, and top tools.

## Query Parameters

<ParamField query="server_id" type="integer" default="0">
  Filter by server ID. Use 0 for all servers.
</ParamField>

<ParamField query="days" type="integer" default="30">
  Number of days to look back (used when `from` is not provided).
</ParamField>

<ParamField query="from" type="string">
  Start date for the range. Format: `YYYY-MM-DD`. Overrides `days` if provided.
</ParamField>

<ParamField query="to" type="string">
  End date for the range. Format: `YYYY-MM-DD`.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
       --url https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=7&server_id=1 \
       --header 'Authorization: Bearer gmcp_your_api_key'
  ```

  ```python Python theme={null}
  import requests
  response = requests.get(
      "https://yoursite.com/wp-json/getmcp/v1/analytics/daily",
      headers={"Authorization": "Bearer gmcp_your_api_key"},
      params={"days": 30, "server_id": 1}
  )
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=90&server_id=1",
    {
      headers: { "Authorization": "Bearer gmcp_your_api_key" }
    }
  );
  const data = await response.json();
  ```

  ```php PHP theme={null}
  $response = wp_remote_get(
      "https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=7&server_id=1",
      ["headers" => ["Authorization" => "Bearer gmcp_your_api_key"]]
  );
  $data = json_decode(wp_remote_retrieve_body($response), true);
  ```

  ```go Go theme={null}
  package main
  import (
  	"fmt"
  	"io"
  	"net/http"
  )

  func main() {
  	req, _ := http.NewRequest("GET", "https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=7&server_id=1", nil)

  	client := &http.Client{}
  	resp, _ := client.Do(req)
  	defer resp.Body.Close()
  	data, _ := io.ReadAll(resp.Body)
  	fmt.Println(string(data))
  }
  ```

  ```java Java theme={null}
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;

  public class Main {
      public static void main(String[] args) throws Exception {
          HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create("https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=7&server_id=1"))
              .GET()
              .build();

          HttpClient client = HttpClient.newHttpClient();
          HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
          System.out.println(response.body());
      }
  }
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'json'
  require 'uri'

  uri = URI('https://yoursite.com/wp-json/getmcp/v1/analytics/daily?days=7&server_id=1')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == 'https'

  request = Net::HTTP::Get.new(uri)

  response = http.request(request)
  puts JSON.parse(response.body)
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  [
    {
      "date": "2025-03-12",
      "total_calls": 312,
      "successful_calls": 305,
      "failed_calls": 7,
      "avg_response_time_ms": 298,
      "unique_clients": 4,
      "top_tools": "{\"get_weather\":180,\"get_forecast\":132}"
    },
    {
      "date": "2025-03-13",
      "total_calls": 428,
      "successful_calls": 421,
      "failed_calls": 7,
      "avg_response_time_ms": 312,
      "unique_clients": 6,
      "top_tools": "{\"get_weather\":250,\"get_forecast\":178}"
    }
  ]
  ```
</ResponseExample>

## Response Fields

<ResponseField name="date" type="string">
  Date in `YYYY-MM-DD` format.
</ResponseField>

<ResponseField name="total_calls" type="integer">
  Total tool calls on this date.
</ResponseField>

<ResponseField name="successful_calls" type="integer">
  Number of calls with `success` status.
</ResponseField>

<ResponseField name="failed_calls" type="integer">
  Number of calls with non-success status.
</ResponseField>

<ResponseField name="avg_response_time_ms" type="integer">
  Average response time in milliseconds.
</ResponseField>

<ResponseField name="unique_clients" type="integer">
  Number of distinct client IPs.
</ResponseField>

<ResponseField name="top_tools" type="string">
  JSON-encoded object of `{"tool_name": call_count}` for the top 10 tools, or null if no tool calls.
</ResponseField>
