Greasy Fork is available in English.

Agar.io Connector

Working agar.io server connector (tested 20.06.2015)

// ==UserScript==
// @name         Agar.io Connector
// @namespace    http://your.homepage/
// @version      0.1
// @description  Working agar.io server connector (tested 20.06.2015)
// @author       shardragon
// @match        http://agar.io/
// @grant        none
// ==/UserScript==

var _XMLHttpRequest = window.XMLHttpRequest;
window.XMLHttpRequest = function(params)
{
    var request = new _XMLHttpRequest(params);
    request.open = function(method, url, async, user, password)
    {
        console.log(url);
        
        if(url === "http://m.agar.io/") {
            request.addEventListener("load", function()
            {
                document.getElementById("serverInput").value = request.responseText.split("\n")[0];
            });
        }
        
        return _XMLHttpRequest.prototype.open.call(this, method, url, async, password);
    }
    return request;
}


window._connectToRequest = null;
window.connectToTries   = 100;
window.connectToAddress = function(address, count)
{
    count = (typeof(count) === "number") ? count : 0;
    
    // Stop previous connection attempt
    if(window._connectToRequest) {
       window._connectToRequest.abort();
    }
    
    if(count > window.connectToTries) {
        $("#connectResponse").text("Exceeded number of tries to retrieve server token");
        return;
    } else {
        $("#connectResponse").text("Searching for server (try " + count + "/" + window.connectToTries + ")" + " ...");
    }
    
    var request = new _XMLHttpRequest();
    request.open("POST", "http://m.agar.io/", true);
    request.addEventListener("load", function()
    {
        window._connectToRequest = null;
        
        var response = request.responseText.split("\n");
        
        var response_address = response[0];
        var response_token   = response[1];
        
        if(response_address === address) {
            connect("ws://" + response_address, response_token);
            
            $("#connectResponse").text("Connection to server established");
        } else {
            connectToAddress(address, (count + 1));
        }
    });
    
    window._connectToRequest = request;
    
    request.send($("#region").val() + $("#gamemode").val());
}

$(document).ready(function() {
    var new_entry = $("#region");
    if (new_entry.length) {
        $("<div class=\"form-group\"><span id=\"connectResponse\"></span></div>").insertAfter("#helloDialog > form > div:nth-child(3)");
        $("<div class=\"form-group\"><input id=\"serverInput\" class=\"form-control\" placeholder=\"255.255.255.255:443\" maxlength=\"20\"></input></div>").insertAfter($("#connectResponse").parent());
        $("<div class=\"form-group\"><button disabled type=\"button\" id=\"connectBtn\" class=\"btn btn-warning btn-needs-server\" onclick=\"connectToAddress($('#serverInput').val());\" style=\"width: 100%\">Connect</button></div>").insertAfter($("#serverInput").parent());
    }
});