<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MCP Graph Server Documentation - Graph Tools</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=VT323&display=swap');
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Azeret Mono', 'VT323', Helvetica, Arial, sans-serif;
background: #000;
color: #fff;
min-height: 100vh;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.header {
text-align: center;
margin-bottom: 40px;
border-bottom: 3px solid #dcecf5;
padding-bottom: 30px;
}
.header h1 {
font-family: 'VT323', monospace;
font-size: 48px;
margin-bottom: 10px;
font-weight: normal;
letter-spacing: 2px;
}
.header p {
font-size: 18px;
color: #dcecf5;
font-family: 'Azeret Mono', monospace;
}
.nav-buttons {
text-align: center;
margin-bottom: 30px;
}
.nav-button {
display: inline-block;
background: #dcecf5;
color: #000;
padding: 15px 25px;
text-decoration: none;
margin: 0 10px;
font-family: 'Azeret Mono', monospace;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: bold;
transition: all 0.3s ease;
border: 3px solid #dcecf5;
}
.nav-button:hover {
background: #000;
color: #dcecf5;
}
a {
color: #000;
background: #dcecf5;
text-decoration: none;
font-weight: bold;
padding: 2px 4px;
transition: all 0.3s ease;
}
a:hover {
color: #dcecf5;
background: #000;
}
.content {
background: #000;
border: 3px solid #dcecf5;
padding: 40px;
margin-bottom: 30px;
}
.section {
margin-bottom: 40px;
}
.section h2 {
font-family: 'VT323', monospace;
color: #fff;
border-bottom: 3px solid #dcecf5;
padding-bottom: 10px;
margin-bottom: 20px;
font-size: 32px;
font-weight: normal;
text-transform: uppercase;
}
.section h3 {
font-family: 'VT323', monospace;
color: #dcecf5;
margin-top: 25px;
margin-bottom: 15px;
font-size: 24px;
font-weight: normal;
}
.tool-card {
background: #000;
border: 3px solid #dcecf5;
padding: 20px;
margin: 20px 0;
}
.tool-name {
font-family: 'VT323', monospace;
font-size: 24px;
font-weight: normal;
color: #dcecf5;
margin-bottom: 10px;
text-transform: uppercase;
}
.tool-description {
margin-bottom: 15px;
color: #fff;
font-family: 'Azeret Mono', monospace;
}
.parameters {
margin-top: 15px;
}
.parameter {
background: #000;
padding: 10px;
margin: 8px 0;
border: 2px solid #dcecf5;
}
.parameter-name {
font-family: 'VT323', monospace;
font-weight: normal;
color: #dcecf5;
font-size: 18px;
}
.parameter-type {
background: #000;
color: #dcecf5;
padding: 2px 6px;
border: 1px solid #dcecf5;
font-family: 'Azeret Mono', monospace;
font-size: 12px;
margin-left: 8px;
}
.required {
background: #000;
color: #fff;
padding: 2px 6px;
border: 1px solid #fff;
font-family: 'Azeret Mono', monospace;
font-size: 12px;
margin-left: 8px;
}
.code-block {
background: #ffffff;
color: #000000;
padding: 30px;
border: 3px solid #dcecf5;
overflow-x: auto;
margin: 20px 0;
font-family: Arial, sans-serif;
font-size: 14px;
line-height: 2.0;
white-space: pre;
tab-size: 2;
}
.installation-steps {
background: #000;
padding: 20px;
border: 3px solid #dcecf5;
margin: 20px 0;
}
.installation-steps ol {
margin-left: 20px;
}
.installation-steps li {
margin: 10px 0;
font-family: 'Azeret Mono', monospace;
}
.installation-steps h3 {
font-family: 'VT323', monospace;
font-size: 24px;
color: #dcecf5;
}
.feature-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin: 20px 0;
}
.feature-item {
background: #000;
padding: 15px;
border: 3px solid #dcecf5;
}
.feature-item h4 {
font-family: 'VT323', monospace;
color: #dcecf5;
margin-bottom: 8px;
font-size: 20px;
font-weight: normal;
}
.feature-item p {
font-family: 'Azeret Mono', monospace;
}
.alert {
background: #000;
color: #fff;
padding: 15px;
margin: 15px 0;
border: 3px solid #dcecf5;
}
.footer {
text-align: center;
color: #dcecf5;
margin-top: 40px;
border-top: 3px solid #dcecf5;
padding-top: 20px;
font-family: 'Azeret Mono', monospace;
}
p {
font-family: 'Azeret Mono', monospace;
}
ul, ol {
font-family: 'Azeret Mono', monospace;
}
strong {
color: #dcecf5;
font-family: 'VT323', monospace;
font-size: 18px;
font-weight: normal;
}
code {
background: #ffffff;
color: #000000;
padding: 4px 8px;
border: 1px solid #dcecf5;
font-family: Arial, sans-serif;
font-size: 13px;
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>MCP SERVER API REFERENCE</h1>
<p>GRAPH ANALYSIS API VIA MODEL CONTEXT PROTOCOL</p>
</div>
<div class="nav-buttons">
<a href="/" class="nav-button">← Back to Main</a>
<a href="/visualizer" class="nav-button">Interactive Visualizer</a>
</div>
<div class="content">
<div class="section">
<h2>MCP SERVER API</h2>
<p>The Graph Tools MCP Server provides a Model Context Protocol (MCP) interface for graph analysis. This API is designed to be used by AI assistants like Claude through the MCP protocol.</p>
<div class="alert">
<strong>Protocol:</strong> This is an MCP server, not a REST API. It communicates via stdio using the Model Context Protocol specification.
</div>
</div>
<div class="section">
<h2>SERVER SETUP</h2>
<h3>INSTALLATION</h3>
<div class="code-block">Step 1: Clone the repository
git clone https://github.com/dromologue/Graph-Tools.git
Step 2: Navigate to the MCP server directory
cd Graph-Tools/mcp-graph-server
Step 3: Install dependencies
npm install</div>
<h3>MCP CLIENT CONFIGURATION</h3>
<p>Add to your Claude Desktop config:</p>
<div class="code-block">Configuration for Claude Desktop:
{
"mcpServers": {
"graph-server": {
"command": "node",
"args": [
"/path/to/Graph-Tools/mcp-graph-server/api-server.js"
],
"env": {
"SERVER_MODE": "mcp"
}
}
}
}</div>
<h3>DIRECT EXECUTION</h3>
<div class="code-block">Option 1: Run as MCP server (stdio mode)
SERVER_MODE=mcp node api-server.js
Option 2: Run as HTTP API server
SERVER_MODE=http node api-server.js
Option 3: Use npm scripts
npm run mcp
npm run api</div>
</div>
<div class="section">
<h2>API ENDPOINTS</h2>
<div class="tool-card">
<div class="tool-name">ANALYZE_RELATIONSHIPS</div>
<div class="tool-description">
Extracts relationships from structured data and generates graph visualizations
</div>
<h3>REMOTE HTTP REQUEST EXAMPLE</h3>
<div class="code-block">Method: POST
URL: https://mcp.dromologue.com/api/analyze-relationships
Content-Type: application/json
Request Body:
{
"data": [
{
"id": "Alice",
"friends": ["Bob", "Carol"]
},
{
"id": "Bob",
"friends": ["Alice", "David"]
},
{
"id": "Carol",
"friends": ["Alice"]
},
{
"id": "David",
"friends": ["Bob"]
}
],
"relationship_fields": ["friends"],
"node_label_field": "id"
}</div>
<h3>PARAMETERS</h3>
<div class="parameter">
<span class="parameter-name">data</span>
<span class="parameter-type">array</span>
<span class="required">required</span>
<div>Array of objects containing relationship data</div>
</div>
<div class="parameter">
<span class="parameter-name">relationship_fields</span>
<span class="parameter-type">array</span>
<span class="required">required</span>
<div>Field names that contain relationship references</div>
</div>
<div class="parameter">
<span class="parameter-name">node_label_field</span>
<span class="parameter-type">string</span>
<div>Field to use for node identification (default: "id")</div>
</div>
<h3>HTTP RESPONSE</h3>
<div class="code-block">Status: 200 OK
Content-Type: application/json
Response Body:
{
"success": true,
"data": "Graph Analysis Complete!
Vertices found: 4
Relationships found: 6
Graph density: 0.500
Files Generated:
- matrix_1642781234567.csv
- visualization_1642781234567.html
- graph_data_1642781234567.json",
"timestamp": "2025-01-21T10:30:00.000Z"
}</div>
<h3>CURL COMMAND EXAMPLE</h3>
<div class="code-block">Step 1: Open terminal or command prompt
Step 2: Run this curl command
curl -X POST https://mcp.dromologue.com/api/analyze-relationships
Step 3: Add the Content-Type header
curl -X POST https://mcp.dromologue.com/api/analyze-relationships \
-H "Content-Type: application/json"
Step 4: Add the data payload
curl -X POST https://mcp.dromologue.com/api/analyze-relationships \
-H "Content-Type: application/json" \
-d '{
"data": [
{
"id": "Alice",
"friends": ["Bob", "Carol"]
},
{
"id": "Bob",
"friends": ["Alice", "David"]
},
{
"id": "Carol",
"friends": ["Alice"]
},
{
"id": "David",
"friends": ["Bob"]
}
],
"relationship_fields": ["friends"],
"node_label_field": "id"
}'</div>
</div>
<div class="tool-card">
<div class="tool-name">CREATE_ADJACENCY_MATRIX</div>
<div class="tool-description">
Creates adjacency matrix from predefined relationship pairs
</div>
<h3>REMOTE HTTP REQUEST EXAMPLE</h3>
<div class="code-block">Method: POST
URL: https://mcp.dromologue.com/api/create-adjacency-matrix
Content-Type: application/json
Request Body:
{
"relationships": [
{
"from": "Alice",
"to": "Bob",
"weight": 1
},
{
"from": "Bob",
"to": "Carol",
"weight": 2
},
{
"from": "Carol",
"to": "Alice",
"weight": 1
}
],
"vertices": ["Alice", "Bob", "Carol"]
}</div>
<h3>PARAMETERS</h3>
<div class="parameter">
<span class="parameter-name">relationships</span>
<span class="parameter-type">array</span>
<span class="required">required</span>
<div>Array of {from, to, weight} relationship objects</div>
</div>
<div class="parameter">
<span class="parameter-name">vertices</span>
<span class="parameter-type">array</span>
<span class="required">required</span>
<div>Array of vertex identifiers</div>
</div>
</div>
<div class="tool-card">
<div class="tool-name">CALCULATE_CENTRALITY</div>
<div class="tool-description">
Computes network centrality measures for graph analysis
</div>
<h3>REQUEST FORMAT</h3>
<div class="code-block">{
"method": "tools/call",
"params": {
"name": "calculate_centrality",
"arguments": {
"relationships": [
{"from": "A", "to": "B"},
{"from": "B", "to": "C"}
],
"vertices": ["A", "B", "C"],
"measures": ["degree", "betweenness"],
"top_n": 5
}
}
}</div>
<h3>PARAMETERS</h3>
<div class="parameter">
<span class="parameter-name">measures</span>
<span class="parameter-type">array</span>
<div>Available: ["degree", "betweenness", "closeness", "eigenvector", "all"]</div>
</div>
<div class="parameter">
<span class="parameter-name">top_n</span>
<span class="parameter-type">number</span>
<div>Number of top-ranked nodes to return (default: 10)</div>
</div>
<h3>RESPONSE</h3>
<div class="code-block">{
"content": [{
"type": "text",
"text": "Centrality Analysis Complete!\n\nDegree Centrality:\n1. B: 0.5000\n2. A: 0.2500\n3. C: 0.2500"
}]
}</div>
</div>
<div class="tool-card">
<div class="tool-name">ANALYZE_NETWORK_STRUCTURE</div>
<div class="tool-description">
Comprehensive analysis combining relationship extraction and centrality
</div>
<h3>REQUEST FORMAT</h3>
<div class="code-block">{
"method": "tools/call",
"params": {
"name": "analyze_network_structure",
"arguments": {
"data": [...],
"relationship_fields": [...],
"include_centrality": true
}
}
}</div>
</div>
</div>
<div class="section">
<h2>DATA FORMATS</h2>
<h3>RELATIONSHIP PATTERNS</h3>
<div class="code-block">// One-to-many relationships
{
"id": "user1",
"friends": ["user2", "user3", "user4"]
}
// One-to-one relationships
{
"employee": "John",
"manager": "Sarah"
}
// Hierarchical data
{
"name": "node1",
"parent": "root",
"children": ["node2", "node3"]
}</div>
<h3>DIRECT RELATIONSHIPS</h3>
<div class="code-block">{
"from": "source_node",
"to": "target_node",
"weight": 1.5
}</div>
<h3>VERTEX SPECIFICATION</h3>
<div class="code-block">["node1", "node2", "node3"]</div>
</div>
<div class="section">
<h2>ERROR RESPONSES</h2>
<h3>VALIDATION ERRORS</h3>
<div class="code-block">{
"content": [{
"type": "text",
"text": "Error: Invalid input: relationships and vertices must be arrays"
}],
"isError": true
}</div>
<h3>PROCESSING ERRORS</h3>
<div class="code-block">{
"content": [{
"type": "text",
"text": "Error: Failed to analyze relationships: Ruby script execution failed"
}],
"isError": true
}</div>
</div>
<div class="section">
<h2>OUTPUT FILES</h2>
<h3>GENERATED ARTIFACTS</h3>
<ul>
<li><strong>CSV Matrix:</strong> <code>matrix_TIMESTAMP.csv</code> - Adjacency matrix</li>
<li><strong>JSON Data:</strong> <code>graph_data_TIMESTAMP.json</code> - D3.js format</li>
<li><strong>HTML Visualization:</strong> <code>visualization_TIMESTAMP.html</code> - Interactive viewer</li>
<li><strong>Vertex List:</strong> <code>vertices_TIMESTAMP.json</code> - Node labels</li>
</ul>
<h3>FILE LOCATIONS</h3>
<div class="code-block">Project structure:
Graph-Tools/
├── mcp-graph-server/
│ └── data/ (CSV and JSON files)
└── Files/ (HTML visualizations)
Example generated files:
- /Graph-Tools/mcp-graph-server/data/matrix_1642781234567.csv
- /Graph-Tools/Files/visualization_1642781234567.html
- /Graph-Tools/Files/graph_data_1642781234567.json</div>
</div>
<div class="section">
<h2>INTEGRATION EXAMPLES</h2>
<h3>PYTHON HTTP CLIENT</h3>
<div class="code-block">Step 1: Install the requests library
pip install requests
Step 2: Import required modules
import requests
import json
Step 3: Define the remote API endpoint
api_url = "https://mcp.dromologue.com/api/analyze-relationships"
Step 4: Prepare your data
data = {
"data": [
{
"id": "Alice",
"friends": ["Bob", "Carol"]
},
{
"id": "Bob",
"friends": ["Alice", "David"]
},
{
"id": "Carol",
"friends": ["Alice"]
},
{
"id": "David",
"friends": ["Bob"]
}
],
"relationship_fields": ["friends"],
"node_label_field": "id"
}
Step 5: Make the API request
response = requests.post(api_url, json=data)
Step 6: Check the response
if response.status_code == 200:
result = response.json()
print("Success:", result["success"])
print("Data:", result["data"])
else:
print("Error:", response.json()["error"])</div>
<h3>NODE.JS HTTP CLIENT</h3>
<div class="code-block">Step 1: Install axios for HTTP requests
npm install axios
Step 2: Import axios module
const axios = require('axios');
Step 3: Define the remote API endpoint
const apiUrl = 'https://mcp.dromologue.com/api/analyze-relationships';
Step 4: Prepare your data
const data = {
data: [
{
id: 'Alice',
friends: ['Bob', 'Carol']
},
{
id: 'Bob',
friends: ['Alice', 'David']
},
{
id: 'Carol',
friends: ['Alice']
},
{
id: 'David',
friends: ['Bob']
}
],
relationship_fields: ['friends'],
node_label_field: 'id'
};
Step 5: Make the API request
async function analyzeRelationships() {
try {
const response = await axios.post(apiUrl, data);
console.log('Success:', response.data.success);
console.log('Result:', response.data.data);
} catch (error) {
console.error('Error:', error.response?.data?.error || error.message);
}
}
Step 6: Call the function
analyzeRelationships();</div>
<h3>RUBY HTTP CLIENT</h3>
<div class="code-block">Step 1: Install the net/http library (included in Ruby standard library)
require 'net/http'
require 'json'
require 'uri'
Step 2: Define the remote API endpoint
api_url = 'https://mcp.dromologue.com/api/analyze-relationships'
Step 3: Prepare your data
data = {
data: [
{
id: 'Alice',
friends: ['Bob', 'Carol']
},
{
id: 'Bob',
friends: ['Alice', 'David']
},
{
id: 'Carol',
friends: ['Alice']
},
{
id: 'David',
friends: ['Bob']
}
],
relationship_fields: ['friends'],
node_label_field: 'id'
}
Step 4: Create HTTP request
uri = URI(api_url)
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri)
Step 5: Set headers and body
request['Content-Type'] = 'application/json'
request.body = data.to_json
Step 6: Make the API request and handle response
begin
response = http.request(request)
if response.code == '200'
result = JSON.parse(response.body)
puts "Success: #{result['success']}"
puts "Data: #{result['data']}"
else
error = JSON.parse(response.body)
puts "Error: #{error['error']}"
end
rescue => e
puts "Network error: #{e.message}"
end</div>
</div>
</div>
<div class="footer">
<p>Graph Tools MCP Server - Built with Node.js, Ruby, and D3.js</p>
<p>Compatible with Claude Desktop and other MCP clients</p>
</div>
</div>
</body>
</html>